summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlperl/lib/CORE
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/tlperl/lib/CORE')
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/EXTERN.h4
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/INTERN.h3
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/XSUB.h52
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/av.h24
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/bitcount.h6
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/charclass_invlists.h352
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/config.h56
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/cop.h255
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/cv.h58
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/dirent.h20
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/dosish.h12
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/ebcdic_tables.h146
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/embed.h40
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/embedvar.h131
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/feature.h77
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/gv.h107
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/handy.h1015
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/hv.h122
-rwxr-xr-xMaster/tlpkg/tlperl/lib/CORE/hv_func.h195
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/hv_macro.h4
-rwxr-xr-xMaster/tlpkg/tlperl/lib/CORE/inline.h472
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/intrpvar.h211
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/invlist_inline.h10
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/iperlsys.h514
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/keywords.h468
-rwxr-xr-x[-rw-r--r--]Master/tlpkg/tlperl/lib/CORE/libperl534.a (renamed from Master/tlpkg/tlperl/lib/CORE/libperl532.a)bin963632 -> 966652 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/metaconfig.h2
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/mg.h35
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/mg_data.h9
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/mg_vtable.h6
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/op.h236
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/op_reg_common.h4
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/opcode.h76
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/opnames.h6
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/pad.h98
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/parser.h10
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/patchlevel.h116
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/perl.h1595
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/perl_inc_macro.h40
-rwxr-xr-xMaster/tlpkg/tlperl/lib/CORE/perl_siphash.h127
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/perlapi.h220
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/perlhost.h560
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/perlio.h19
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/perliol.h35
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/perlvars.h47
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/perly.h189
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/pp.h109
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/pp_proto.h4
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/proto.h213
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/reentr.h128
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/regcharclass.h2763
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/regcomp.h53
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/regexp.h391
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/regnodes.h1400
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/sbox32_hash.h2
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/scope.h114
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/stadtx_hash.h283
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/sv.h762
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/sys/socket.h2
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/thread.h255
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/time64.h10
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/time64_config.h2
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/uconfig.h66
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/uni_keywords.h13
-rwxr-xr-xMaster/tlpkg/tlperl/lib/CORE/unicode_constants.h28
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/unixish.h4
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/utf8.h87
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/utfebcdic.h122
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/util.h36
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/uudmap.h5
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/vdir.h720
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/vmem.h788
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/vutil.h27
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/warnings.h244
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/win32.h53
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/win32iop.h9
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/win32thread.h104
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/zaphod32_hash.h4
78 files changed, 9859 insertions, 6726 deletions
diff --git a/Master/tlpkg/tlperl/lib/CORE/EXTERN.h b/Master/tlpkg/tlperl/lib/CORE/EXTERN.h
index 4406b297521..7946323dcec 100644
--- a/Master/tlpkg/tlperl/lib/CORE/EXTERN.h
+++ b/Master/tlpkg/tlperl/lib/CORE/EXTERN.h
@@ -19,14 +19,14 @@
#undef EXTCONST
#undef dEXTCONST
-# if (defined(WIN32) || defined(__SYMBIAN32__)) && !defined(PERL_STATIC_SYMS)
+# if defined(WIN32) && !defined(PERL_STATIC_SYMS)
/* miniperl should not export anything */
# if defined(PERL_IS_MINIPERL)
# define EXT extern
# define dEXT
# define EXTCONST extern const
# define dEXTCONST const
-# elif defined(PERLDLL) || defined(__SYMBIAN32__)
+# elif defined(PERLDLL)
# define EXT EXTERN_C __declspec(dllexport)
# define dEXT
# define EXTCONST EXTERN_C __declspec(dllexport) const
diff --git a/Master/tlpkg/tlperl/lib/CORE/INTERN.h b/Master/tlpkg/tlperl/lib/CORE/INTERN.h
index 35bb4ee5cb3..4305b6bc029 100644
--- a/Master/tlpkg/tlperl/lib/CORE/INTERN.h
+++ b/Master/tlpkg/tlperl/lib/CORE/INTERN.h
@@ -19,8 +19,7 @@
#undef EXTCONST
#undef dEXTCONST
-# if (defined(WIN32) && defined(__MINGW32__) && ! defined(PERL_IS_MINIPERL)) \
- || defined(__SYMBIAN32__)
+# if (defined(WIN32) && defined(__MINGW32__) && ! defined(PERL_IS_MINIPERL))
# ifdef __cplusplus
# define EXT __declspec(dllexport)
# define dEXT
diff --git a/Master/tlpkg/tlperl/lib/CORE/XSUB.h b/Master/tlpkg/tlperl/lib/CORE/XSUB.h
index 94e9dade6af..c1e39598854 100644
--- a/Master/tlpkg/tlperl/lib/CORE/XSUB.h
+++ b/Master/tlpkg/tlperl/lib/CORE/XSUB.h
@@ -14,19 +14,25 @@
/* first, some documentation for xsubpp-generated items */
/*
-=head1 C<xsubpp> variables and internal functions
+=for apidoc_section $XS
-=for apidoc Amn|char*|CLASS
+F<xsubpp> compiles XS code into C. See L<perlutil/xsubpp>.
+
+=for comment
+Some variables below are flagged with 'u' because Devel::PPPort can't currently
+readily test them as they spring into existence by compiling with xsubpp.
+
+=for apidoc Amnu|char*|CLASS
Variable which is setup by C<xsubpp> to indicate the
class name for a C++ XS constructor. This is always a C<char*>. See
C<L</THIS>>.
-=for apidoc Amn|(whatever)|RETVAL
+=for apidoc Amnu|type|RETVAL
Variable which is setup by C<xsubpp> to hold the return value for an
XSUB. This is always the proper type for the XSUB. See
L<perlxs/"The RETVAL Variable">.
-=for apidoc Amn|(whatever)|THIS
+=for apidoc Amnu|type|THIS
Variable which is setup by C<xsubpp> to designate the object in a C++
XSUB. This is always the proper type for the C++ object. See C<L</CLASS>> and
L<perlxs/"Using XS With C++">.
@@ -47,18 +53,27 @@ XSUB's aliases was used to invoke it. See L<perlxs/"The ALIAS: Keyword">.
=for apidoc Am|SV*|ST|int ix
Used to access elements on the XSUB's stack.
-=for apidoc AmnU||XS
+=for apidoc Ay||XS|name
Macro to declare an XSUB and its C parameter list. This is handled by
-C<xsubpp>. It is the same as using the more explicit C<XS_EXTERNAL> macro.
+C<xsubpp>. It is the same as using the more explicit C<XS_EXTERNAL> macro; the
+latter is preferred.
-=for apidoc AmU||XS_INTERNAL
+=for apidoc Ayu||XS_INTERNAL|name
Macro to declare an XSUB and its C parameter list without exporting the symbols.
This is handled by C<xsubpp> and generally preferable over exporting the XSUB
symbols unnecessarily.
-=for apidoc AmnU||XS_EXTERNAL
+=for comment
+XS_INTERNAL marked 'u' because declaring a function static within our test
+function doesn't work
+
+=for apidoc Ay||XS_EXTERNAL|name
Macro to declare an XSUB and its C parameter list explicitly exporting the symbols.
+=for apidoc Ay||XSPROTO|name
+Macro used by C<L</XS_INTERNAL>> and C<L</XS_EXTERNAL>> to declare a function
+prototype. You probably shouldn't be using this directly yourself.
+
=for apidoc Amns||dAX
Sets up the C<ax> variable.
This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
@@ -93,10 +108,10 @@ is a lexical C<$_> in scope.
*/
#ifndef PERL_UNUSED_ARG
-# define PERL_UNUSED_ARG(x) ((void)x)
+# define PERL_UNUSED_ARG(x) ((void)sizeof(x))
#endif
#ifndef PERL_UNUSED_VAR
-# define PERL_UNUSED_VAR(x) ((void)x)
+# define PERL_UNUSED_VAR(x) ((void)sizeof(x))
#endif
#define ST(off) PL_stack_base[ax + (off)]
@@ -127,9 +142,6 @@ is a lexical C<$_> in scope.
#if defined(__CYGWIN__) && defined(USE_DYNAMIC_LOADING)
# define XS_EXTERNAL(name) __declspec(dllexport) XSPROTO(name)
# define XS_INTERNAL(name) STATIC XSPROTO(name)
-#elif defined(__SYMBIAN32__)
-# define XS_EXTERNAL(name) EXPORT_C XSPROTO(name)
-# define XS_INTERNAL(name) EXPORT_C STATIC XSPROTO(name)
#elif defined(__cplusplus)
# define XS_EXTERNAL(name) extern "C" XSPROTO(name)
# define XS_INTERNAL(name) static XSPROTO(name)
@@ -163,16 +175,16 @@ is a lexical C<$_> in scope.
PL_xsubfilename. */
#define dXSBOOTARGSXSAPIVERCHK \
I32 ax = XS_BOTHVERSION_SETXSUBFN_POPMARK_BOOTCHECK; \
- SV **mark = PL_stack_base + ax; dSP; dITEMS
+ SV **mark = PL_stack_base + ax - 1; dSP; dITEMS
#define dXSBOOTARGSAPIVERCHK \
I32 ax = XS_APIVERSION_SETXSUBFN_POPMARK_BOOTCHECK; \
- SV **mark = PL_stack_base + ax; dSP; dITEMS
+ SV **mark = PL_stack_base + ax - 1; dSP; dITEMS
/* dXSBOOTARGSNOVERCHK has no API in xsubpp to choose it so do
#undef dXSBOOTARGSXSAPIVERCHK
#define dXSBOOTARGSXSAPIVERCHK dXSBOOTARGSNOVERCHK */
#define dXSBOOTARGSNOVERCHK \
I32 ax = XS_SETXSUBFN_POPMARK; \
- SV **mark = PL_stack_base + ax; dSP; dITEMS
+ SV **mark = PL_stack_base + ax - 1; dSP; dITEMS
#define dXSTARG SV * const targ = ((PL_op->op_private & OPpENTERSUB_HASTARG) \
? PAD_SV(PL_op->op_targ) : sv_newmortal())
@@ -203,7 +215,7 @@ is a lexical C<$_> in scope.
/* Typically used to return values from XS functions. */
/*
-=head1 Stack Manipulation Macros
+=for apidoc_section $stack
=for apidoc Am|void|XST_mIV|int pos|IV iv
Place an integer into the specified position C<pos> on the stack. The
@@ -261,8 +273,6 @@ Return C<&PL_sv_undef> from an XSUB immediately. Uses C<XST_mUNDEF>.
=for apidoc Amns||XSRETURN_EMPTY
Return an empty list from an XSUB immediately.
-=head1 Variables created by C<xsubpp> and C<xsubpp> internal functions
-
=for apidoc AmU||newXSproto|char* name|XSUBADDR_t f|char* filename|const char *proto
Used by C<xsubpp> to hook up XSUBs as Perl subs. Adds Perl prototypes to
the subs.
@@ -281,7 +291,7 @@ C<xsubpp>. See L<perlxs/"The VERSIONCHECK: Keyword">.
Macro to verify that the perl api version an XS module has been compiled against
matches the api version of the perl interpreter it's being loaded into.
-=head1 Exception Handling (simple) Macros
+=for apidoc_section $exceptions
=for apidoc Amns||dXCPT
Set up necessary local variables for exception handling.
@@ -474,8 +484,6 @@ Rethrows a previously caught exception. See L<perlguts/"Exception Handling">.
# define VTBL_amagicelem &PL_vtbl_amagicelem
#endif
-#include "perlapi.h"
-
#if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_NO_GET_CONTEXT) && !defined(PERL_CORE)
# undef aTHX
# undef aTHX_
diff --git a/Master/tlpkg/tlperl/lib/CORE/av.h b/Master/tlpkg/tlperl/lib/CORE/av.h
index 5e39c42ea12..41cb6fefd89 100644
--- a/Master/tlpkg/tlperl/lib/CORE/av.h
+++ b/Master/tlpkg/tlperl/lib/CORE/av.h
@@ -37,22 +37,25 @@ struct xpvav {
*/
/*
-=head1 Handy Values
-
=for apidoc ADmnU||Nullav
Null AV pointer.
(deprecated - use C<(AV *)NULL> instead)
-=head1 Array Manipulation Functions
+=for apidoc Am|SSize_t|AvFILL|AV* av
+Same as C<L</av_top_index>> or C<L</av_tindex>>.
+
+=for apidoc Cm|SSize_t|AvFILLp|AV* av
-=for apidoc Am|int|AvFILL|AV* av
-Same as C<av_top_index()> or C<av_tindex()>.
+If the array C<av> is empty, this returns -1; otherwise it returns the maximum
+value of the indices of all the array elements which are currently defined in
+C<av>. It does not handle magic, hence the C<p> private indication in its name.
-=for apidoc av_tindex
-Same as C<av_top_index()>.
+=for apidoc Am|SV**|AvARRAY|AV* av
+Returns a pointer to the AV's internal SV* array.
-=for apidoc m|int|AvFILLp|AV* av
+This is useful for doing pointer arithmetic on the array.
+If all you need is to look up an array element, then prefer C<av_fetch>.
=cut
*/
@@ -80,8 +83,9 @@ Same as C<av_top_index()>.
#define AvREALISH(av) (SvFLAGS(av) & (SVpav_REAL|SVpav_REIFY))
#define AvFILL(av) ((SvRMAGICAL((const SV *) (av))) \
- ? mg_size(MUTABLE_SV(av)) : AvFILLp(av))
-#define av_tindex(av) av_top_index(av)
+ ? mg_size(MUTABLE_SV(av)) : AvFILLp(av))
+#define av_top_index(av) AvFILL(av)
+#define av_tindex(av) av_top_index(av)
/* Note that it doesn't make sense to do this:
* SvGETMAGIC(av); IV x = av_tindex_nomg(av);
diff --git a/Master/tlpkg/tlperl/lib/CORE/bitcount.h b/Master/tlpkg/tlperl/lib/CORE/bitcount.h
index 9f2be6152ae..3d0a13e33c1 100644
--- a/Master/tlpkg/tlperl/lib/CORE/bitcount.h
+++ b/Master/tlpkg/tlperl/lib/CORE/bitcount.h
@@ -1,3 +1,9 @@
+/* ..\bitcount.h:
+ * THIS FILE IS AUTO-GENERATED DURING THE BUILD by: ..\generate_uudmap.exe
+ *
+ * These values will populate PL_bitcount[]:
+ * this is a count of bits for each U8 value 0..255
+*/
{
0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4,
1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
diff --git a/Master/tlpkg/tlperl/lib/CORE/charclass_invlists.h b/Master/tlpkg/tlperl/lib/CORE/charclass_invlists.h
index 9a6a9cf789c..18c26afae00 100644
--- a/Master/tlpkg/tlperl/lib/CORE/charclass_invlists.h
+++ b/Master/tlpkg/tlperl/lib/CORE/charclass_invlists.h
@@ -29629,7 +29629,7 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV _Perl_IVCF_invlist[] = { /* for ASCII/Latin1 */
- 1316, /* Number of elements */
+ 1318, /* Number of elements */
148565664, /* Version and data structure type */
0, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -29640,6 +29640,8 @@ static const UV _Perl_IVCF_invlist[] = { /* for ASCII/Latin1 */
0x73,
0x74,
0x7B,
+ 0xB5,
+ 0xB6,
0xDF,
0xE0,
0xE5,
@@ -30991,7 +30993,8 @@ typedef enum {
IVCF_use_AUX_TABLE_24 = -24,
IVCF_use_AUX_TABLE_25 = -25,
IVCF_use_AUX_TABLE_26 = -26,
- IVCF_use_AUX_TABLE_27 = -27
+ IVCF_use_AUX_TABLE_27 = -27,
+ IVCF_use_AUX_TABLE_28 = -28
} IVCF_enum;
#define HAS_IVCF_AUX_TABLES
@@ -31007,129 +31010,134 @@ static const U32 IVCF_AUX_TABLE_2[] = {
};
static const U32 IVCF_AUX_TABLE_3[] = {
+ 0x39C,
+ 0x3BC
+};
+
+static const U32 IVCF_AUX_TABLE_4[] = {
0xC5,
0x212B
};
-static const U32 IVCF_AUX_TABLE_4[] = {
+static const U32 IVCF_AUX_TABLE_5[] = {
0x1C4,
0x1C5
};
-static const U32 IVCF_AUX_TABLE_5[] = {
+static const U32 IVCF_AUX_TABLE_6[] = {
0x1C7,
0x1C8
};
-static const U32 IVCF_AUX_TABLE_6[] = {
+static const U32 IVCF_AUX_TABLE_7[] = {
0x1CA,
0x1CB
};
-static const U32 IVCF_AUX_TABLE_7[] = {
+static const U32 IVCF_AUX_TABLE_8[] = {
0x1F1,
0x1F2
};
-static const U32 IVCF_AUX_TABLE_8[] = {
+static const U32 IVCF_AUX_TABLE_9[] = {
0x392,
0x3D0
};
-static const U32 IVCF_AUX_TABLE_9[] = {
+static const U32 IVCF_AUX_TABLE_10[] = {
0x395,
0x3F5
};
-static const U32 IVCF_AUX_TABLE_10[] = {
+static const U32 IVCF_AUX_TABLE_11[] = {
0x398,
0x3D1,
0x3F4
};
-static const U32 IVCF_AUX_TABLE_11[] = {
+static const U32 IVCF_AUX_TABLE_12[] = {
0x345,
0x399,
0x1FBE
};
-static const U32 IVCF_AUX_TABLE_12[] = {
+static const U32 IVCF_AUX_TABLE_13[] = {
0x39A,
0x3F0
};
-static const U32 IVCF_AUX_TABLE_13[] = {
+static const U32 IVCF_AUX_TABLE_14[] = {
0xB5,
0x39C
};
-static const U32 IVCF_AUX_TABLE_14[] = {
+static const U32 IVCF_AUX_TABLE_15[] = {
0x3A0,
0x3D6
};
-static const U32 IVCF_AUX_TABLE_15[] = {
+static const U32 IVCF_AUX_TABLE_16[] = {
0x3A1,
0x3F1
};
-static const U32 IVCF_AUX_TABLE_16[] = {
+static const U32 IVCF_AUX_TABLE_17[] = {
0x3A3,
0x3C2
};
-static const U32 IVCF_AUX_TABLE_17[] = {
+static const U32 IVCF_AUX_TABLE_18[] = {
0x3A6,
0x3D5
};
-static const U32 IVCF_AUX_TABLE_18[] = {
+static const U32 IVCF_AUX_TABLE_19[] = {
0x3A9,
0x2126
};
-static const U32 IVCF_AUX_TABLE_19[] = {
+static const U32 IVCF_AUX_TABLE_20[] = {
0x412,
0x1C80
};
-static const U32 IVCF_AUX_TABLE_20[] = {
+static const U32 IVCF_AUX_TABLE_21[] = {
0x414,
0x1C81
};
-static const U32 IVCF_AUX_TABLE_21[] = {
+static const U32 IVCF_AUX_TABLE_22[] = {
0x41E,
0x1C82
};
-static const U32 IVCF_AUX_TABLE_22[] = {
+static const U32 IVCF_AUX_TABLE_23[] = {
0x421,
0x1C83
};
-static const U32 IVCF_AUX_TABLE_23[] = {
+static const U32 IVCF_AUX_TABLE_24[] = {
0x422,
0x1C84,
0x1C85
};
-static const U32 IVCF_AUX_TABLE_24[] = {
+static const U32 IVCF_AUX_TABLE_25[] = {
0x42A,
0x1C86
};
-static const U32 IVCF_AUX_TABLE_25[] = {
+static const U32 IVCF_AUX_TABLE_26[] = {
0x462,
0x1C87
};
-static const U32 IVCF_AUX_TABLE_26[] = {
+static const U32 IVCF_AUX_TABLE_27[] = {
0x1E60,
0x1E9B
};
-static const U32 IVCF_AUX_TABLE_27[] = {
+static const U32 IVCF_AUX_TABLE_28[] = {
0x1C88,
0xA64A
};
@@ -31162,7 +31170,8 @@ static const U32 * const IVCF_AUX_TABLE_ptrs[] = {
IVCF_AUX_TABLE_24,
IVCF_AUX_TABLE_25,
IVCF_AUX_TABLE_26,
- IVCF_AUX_TABLE_27
+ IVCF_AUX_TABLE_27,
+ IVCF_AUX_TABLE_28
};
/* Parallel table to the above, giving the number of elements in each table
@@ -31179,9 +31188,9 @@ static const U8 IVCF_AUX_TABLE_lengths[] = {
2 /* IVCF_AUX_TABLE_7 */,
2 /* IVCF_AUX_TABLE_8 */,
2 /* IVCF_AUX_TABLE_9 */,
- 3 /* IVCF_AUX_TABLE_10 */,
+ 2 /* IVCF_AUX_TABLE_10 */,
3 /* IVCF_AUX_TABLE_11 */,
- 2 /* IVCF_AUX_TABLE_12 */,
+ 3 /* IVCF_AUX_TABLE_12 */,
2 /* IVCF_AUX_TABLE_13 */,
2 /* IVCF_AUX_TABLE_14 */,
2 /* IVCF_AUX_TABLE_15 */,
@@ -31192,11 +31201,12 @@ static const U8 IVCF_AUX_TABLE_lengths[] = {
2 /* IVCF_AUX_TABLE_20 */,
2 /* IVCF_AUX_TABLE_21 */,
2 /* IVCF_AUX_TABLE_22 */,
- 3 /* IVCF_AUX_TABLE_23 */,
- 2 /* IVCF_AUX_TABLE_24 */,
+ 2 /* IVCF_AUX_TABLE_23 */,
+ 3 /* IVCF_AUX_TABLE_24 */,
2 /* IVCF_AUX_TABLE_25 */,
2 /* IVCF_AUX_TABLE_26 */,
- 2 /* IVCF_AUX_TABLE_27 */
+ 2 /* IVCF_AUX_TABLE_27 */,
+ 2 /* IVCF_AUX_TABLE_28 */
};
static const I32 _Perl_IVCF_invmap[] = { /* for ASCII/Latin1 */
@@ -31207,9 +31217,11 @@ static const I32 _Perl_IVCF_invmap[] = { /* for ASCII/Latin1 */
IVCF_use_AUX_TABLE_2,
0x54,
0,
+ IVCF_use_AUX_TABLE_3,
+ 0,
0x1E9E,
0xC0,
- IVCF_use_AUX_TABLE_3,
+ IVCF_use_AUX_TABLE_4,
0xC6,
0,
0xD8,
@@ -31378,12 +31390,12 @@ static const I32 _Perl_IVCF_invmap[] = { /* for ASCII/Latin1 */
0,
0x1F7,
0,
- IVCF_use_AUX_TABLE_4,
- 0,
IVCF_use_AUX_TABLE_5,
0,
IVCF_use_AUX_TABLE_6,
0,
+ IVCF_use_AUX_TABLE_7,
+ 0,
0x1CD,
0,
0x1CF,
@@ -31419,7 +31431,7 @@ static const I32 _Perl_IVCF_invmap[] = { /* for ASCII/Latin1 */
0,
0x1EE,
0,
- IVCF_use_AUX_TABLE_7,
+ IVCF_use_AUX_TABLE_8,
0,
0x1F4,
0,
@@ -31562,24 +31574,24 @@ static const I32 _Perl_IVCF_invmap[] = { /* for ASCII/Latin1 */
0x388,
0x1FE3,
0x391,
- IVCF_use_AUX_TABLE_8,
- 0x393,
IVCF_use_AUX_TABLE_9,
- 0x396,
+ 0x393,
IVCF_use_AUX_TABLE_10,
+ 0x396,
IVCF_use_AUX_TABLE_11,
IVCF_use_AUX_TABLE_12,
- 0x39B,
IVCF_use_AUX_TABLE_13,
- 0x39D,
+ 0x39B,
IVCF_use_AUX_TABLE_14,
+ 0x39D,
IVCF_use_AUX_TABLE_15,
- 0,
IVCF_use_AUX_TABLE_16,
- 0x3A4,
+ 0,
IVCF_use_AUX_TABLE_17,
- 0x3A7,
+ 0x3A4,
IVCF_use_AUX_TABLE_18,
+ 0x3A7,
+ IVCF_use_AUX_TABLE_19,
0x3AA,
0x38C,
0x38E,
@@ -31618,22 +31630,22 @@ static const I32 _Perl_IVCF_invmap[] = { /* for ASCII/Latin1 */
0x3FA,
0,
0x410,
- IVCF_use_AUX_TABLE_19,
- 0x413,
IVCF_use_AUX_TABLE_20,
- 0x415,
+ 0x413,
IVCF_use_AUX_TABLE_21,
- 0x41F,
+ 0x415,
IVCF_use_AUX_TABLE_22,
+ 0x41F,
IVCF_use_AUX_TABLE_23,
- 0x423,
IVCF_use_AUX_TABLE_24,
+ 0x423,
+ IVCF_use_AUX_TABLE_25,
0x42B,
0x400,
0,
0x460,
0,
- IVCF_use_AUX_TABLE_25,
+ IVCF_use_AUX_TABLE_26,
0,
0x464,
0,
@@ -31941,7 +31953,7 @@ static const I32 _Perl_IVCF_invmap[] = { /* for ASCII/Latin1 */
0,
0x1E5E,
0,
- IVCF_use_AUX_TABLE_26,
+ IVCF_use_AUX_TABLE_27,
0,
0x1E62,
0,
@@ -32296,7 +32308,7 @@ static const I32 _Perl_IVCF_invmap[] = { /* for ASCII/Latin1 */
0,
0xA648,
0,
- IVCF_use_AUX_TABLE_27,
+ IVCF_use_AUX_TABLE_28,
0,
0xA64C,
0,
@@ -32530,7 +32542,7 @@ static const I32 _Perl_IVCF_invmap[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV _Perl_IVCF_invlist[] = { /* for EBCDIC 1047 */
- 1331, /* Number of elements */
+ 1333, /* Number of elements */
148565664, /* Version and data structure type */
0, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -32556,6 +32568,8 @@ static const UV _Perl_IVCF_invlist[] = { /* for EBCDIC 1047 */
0x9A,
0x9C,
0x9D,
+ 0xA0,
+ 0xA1,
0xA2,
0xA3,
0xAA,
@@ -33910,7 +33924,8 @@ typedef enum {
IVCF_use_AUX_TABLE_24 = -24,
IVCF_use_AUX_TABLE_25 = -25,
IVCF_use_AUX_TABLE_26 = -26,
- IVCF_use_AUX_TABLE_27 = -27
+ IVCF_use_AUX_TABLE_27 = -27,
+ IVCF_use_AUX_TABLE_28 = -28
} IVCF_enum;
#define HAS_IVCF_AUX_TABLES
@@ -33926,129 +33941,134 @@ static const U32 IVCF_AUX_TABLE_2[] = {
};
static const U32 IVCF_AUX_TABLE_3[] = {
+ 0x39C,
+ 0x3BC
+};
+
+static const U32 IVCF_AUX_TABLE_4[] = {
0xE2,
0x17F
};
-static const U32 IVCF_AUX_TABLE_4[] = {
+static const U32 IVCF_AUX_TABLE_5[] = {
0x1C4,
0x1C5
};
-static const U32 IVCF_AUX_TABLE_5[] = {
+static const U32 IVCF_AUX_TABLE_6[] = {
0x1C7,
0x1C8
};
-static const U32 IVCF_AUX_TABLE_6[] = {
+static const U32 IVCF_AUX_TABLE_7[] = {
0x1CA,
0x1CB
};
-static const U32 IVCF_AUX_TABLE_7[] = {
+static const U32 IVCF_AUX_TABLE_8[] = {
0x1F1,
0x1F2
};
-static const U32 IVCF_AUX_TABLE_8[] = {
+static const U32 IVCF_AUX_TABLE_9[] = {
0x392,
0x3D0
};
-static const U32 IVCF_AUX_TABLE_9[] = {
+static const U32 IVCF_AUX_TABLE_10[] = {
0x395,
0x3F5
};
-static const U32 IVCF_AUX_TABLE_10[] = {
+static const U32 IVCF_AUX_TABLE_11[] = {
0x398,
0x3D1,
0x3F4
};
-static const U32 IVCF_AUX_TABLE_11[] = {
+static const U32 IVCF_AUX_TABLE_12[] = {
0x345,
0x399,
0x1FBE
};
-static const U32 IVCF_AUX_TABLE_12[] = {
+static const U32 IVCF_AUX_TABLE_13[] = {
0x39A,
0x3F0
};
-static const U32 IVCF_AUX_TABLE_13[] = {
+static const U32 IVCF_AUX_TABLE_14[] = {
0xA0,
0x39C
};
-static const U32 IVCF_AUX_TABLE_14[] = {
+static const U32 IVCF_AUX_TABLE_15[] = {
0x3A0,
0x3D6
};
-static const U32 IVCF_AUX_TABLE_15[] = {
+static const U32 IVCF_AUX_TABLE_16[] = {
0x3A1,
0x3F1
};
-static const U32 IVCF_AUX_TABLE_16[] = {
+static const U32 IVCF_AUX_TABLE_17[] = {
0x3A3,
0x3C2
};
-static const U32 IVCF_AUX_TABLE_17[] = {
+static const U32 IVCF_AUX_TABLE_18[] = {
0x3A6,
0x3D5
};
-static const U32 IVCF_AUX_TABLE_18[] = {
+static const U32 IVCF_AUX_TABLE_19[] = {
0x3A9,
0x2126
};
-static const U32 IVCF_AUX_TABLE_19[] = {
+static const U32 IVCF_AUX_TABLE_20[] = {
0x412,
0x1C80
};
-static const U32 IVCF_AUX_TABLE_20[] = {
+static const U32 IVCF_AUX_TABLE_21[] = {
0x414,
0x1C81
};
-static const U32 IVCF_AUX_TABLE_21[] = {
+static const U32 IVCF_AUX_TABLE_22[] = {
0x41E,
0x1C82
};
-static const U32 IVCF_AUX_TABLE_22[] = {
+static const U32 IVCF_AUX_TABLE_23[] = {
0x421,
0x1C83
};
-static const U32 IVCF_AUX_TABLE_23[] = {
+static const U32 IVCF_AUX_TABLE_24[] = {
0x422,
0x1C84,
0x1C85
};
-static const U32 IVCF_AUX_TABLE_24[] = {
+static const U32 IVCF_AUX_TABLE_25[] = {
0x42A,
0x1C86
};
-static const U32 IVCF_AUX_TABLE_25[] = {
+static const U32 IVCF_AUX_TABLE_26[] = {
0x462,
0x1C87
};
-static const U32 IVCF_AUX_TABLE_26[] = {
+static const U32 IVCF_AUX_TABLE_27[] = {
0x1E60,
0x1E9B
};
-static const U32 IVCF_AUX_TABLE_27[] = {
+static const U32 IVCF_AUX_TABLE_28[] = {
0x1C88,
0xA64A
};
@@ -34081,7 +34101,8 @@ static const U32 * const IVCF_AUX_TABLE_ptrs[] = {
IVCF_AUX_TABLE_24,
IVCF_AUX_TABLE_25,
IVCF_AUX_TABLE_26,
- IVCF_AUX_TABLE_27
+ IVCF_AUX_TABLE_27,
+ IVCF_AUX_TABLE_28
};
/* Parallel table to the above, giving the number of elements in each table
@@ -34098,9 +34119,9 @@ static const U8 IVCF_AUX_TABLE_lengths[] = {
2 /* IVCF_AUX_TABLE_7 */,
2 /* IVCF_AUX_TABLE_8 */,
2 /* IVCF_AUX_TABLE_9 */,
- 3 /* IVCF_AUX_TABLE_10 */,
+ 2 /* IVCF_AUX_TABLE_10 */,
3 /* IVCF_AUX_TABLE_11 */,
- 2 /* IVCF_AUX_TABLE_12 */,
+ 3 /* IVCF_AUX_TABLE_12 */,
2 /* IVCF_AUX_TABLE_13 */,
2 /* IVCF_AUX_TABLE_14 */,
2 /* IVCF_AUX_TABLE_15 */,
@@ -34111,11 +34132,12 @@ static const U8 IVCF_AUX_TABLE_lengths[] = {
2 /* IVCF_AUX_TABLE_20 */,
2 /* IVCF_AUX_TABLE_21 */,
2 /* IVCF_AUX_TABLE_22 */,
- 3 /* IVCF_AUX_TABLE_23 */,
- 2 /* IVCF_AUX_TABLE_24 */,
+ 2 /* IVCF_AUX_TABLE_23 */,
+ 3 /* IVCF_AUX_TABLE_24 */,
2 /* IVCF_AUX_TABLE_25 */,
2 /* IVCF_AUX_TABLE_26 */,
- 2 /* IVCF_AUX_TABLE_27 */
+ 2 /* IVCF_AUX_TABLE_27 */,
+ 2 /* IVCF_AUX_TABLE_28 */
};
static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 1047 */
@@ -34142,6 +34164,8 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 1047 */
0x9E,
0,
IVCF_use_AUX_TABLE_3,
+ 0,
+ IVCF_use_AUX_TABLE_4,
0xE3,
0,
0xEB,
@@ -34312,12 +34336,12 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 1047 */
0,
0x1F7,
0,
- IVCF_use_AUX_TABLE_4,
- 0,
IVCF_use_AUX_TABLE_5,
0,
IVCF_use_AUX_TABLE_6,
0,
+ IVCF_use_AUX_TABLE_7,
+ 0,
0x1CD,
0,
0x1CF,
@@ -34353,7 +34377,7 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 1047 */
0,
0x1EE,
0,
- IVCF_use_AUX_TABLE_7,
+ IVCF_use_AUX_TABLE_8,
0,
0x1F4,
0,
@@ -34496,24 +34520,24 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 1047 */
0x388,
0x1FE3,
0x391,
- IVCF_use_AUX_TABLE_8,
- 0x393,
IVCF_use_AUX_TABLE_9,
- 0x396,
+ 0x393,
IVCF_use_AUX_TABLE_10,
+ 0x396,
IVCF_use_AUX_TABLE_11,
IVCF_use_AUX_TABLE_12,
- 0x39B,
IVCF_use_AUX_TABLE_13,
- 0x39D,
+ 0x39B,
IVCF_use_AUX_TABLE_14,
+ 0x39D,
IVCF_use_AUX_TABLE_15,
- 0,
IVCF_use_AUX_TABLE_16,
- 0x3A4,
+ 0,
IVCF_use_AUX_TABLE_17,
- 0x3A7,
+ 0x3A4,
IVCF_use_AUX_TABLE_18,
+ 0x3A7,
+ IVCF_use_AUX_TABLE_19,
0x3AA,
0x38C,
0x38E,
@@ -34552,22 +34576,22 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 1047 */
0x3FA,
0,
0x410,
- IVCF_use_AUX_TABLE_19,
- 0x413,
IVCF_use_AUX_TABLE_20,
- 0x415,
+ 0x413,
IVCF_use_AUX_TABLE_21,
- 0x41F,
+ 0x415,
IVCF_use_AUX_TABLE_22,
+ 0x41F,
IVCF_use_AUX_TABLE_23,
- 0x423,
IVCF_use_AUX_TABLE_24,
+ 0x423,
+ IVCF_use_AUX_TABLE_25,
0x42B,
0x400,
0,
0x460,
0,
- IVCF_use_AUX_TABLE_25,
+ IVCF_use_AUX_TABLE_26,
0,
0x464,
0,
@@ -34875,7 +34899,7 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 1047 */
0,
0x1E5E,
0,
- IVCF_use_AUX_TABLE_26,
+ IVCF_use_AUX_TABLE_27,
0,
0x1E62,
0,
@@ -35230,7 +35254,7 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 1047 */
0,
0xA648,
0,
- IVCF_use_AUX_TABLE_27,
+ IVCF_use_AUX_TABLE_28,
0,
0xA64C,
0,
@@ -35464,7 +35488,7 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV _Perl_IVCF_invlist[] = { /* for EBCDIC 037 */
- 1329, /* Number of elements */
+ 1331, /* Number of elements */
148565664, /* Version and data structure type */
0, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -35488,6 +35512,8 @@ static const UV _Perl_IVCF_invlist[] = { /* for EBCDIC 037 */
0x9A,
0x9C,
0x9D,
+ 0xA0,
+ 0xA1,
0xA2,
0xA3,
0xAA,
@@ -36842,7 +36868,8 @@ typedef enum {
IVCF_use_AUX_TABLE_24 = -24,
IVCF_use_AUX_TABLE_25 = -25,
IVCF_use_AUX_TABLE_26 = -26,
- IVCF_use_AUX_TABLE_27 = -27
+ IVCF_use_AUX_TABLE_27 = -27,
+ IVCF_use_AUX_TABLE_28 = -28
} IVCF_enum;
#define HAS_IVCF_AUX_TABLES
@@ -36858,129 +36885,134 @@ static const U32 IVCF_AUX_TABLE_2[] = {
};
static const U32 IVCF_AUX_TABLE_3[] = {
+ 0x39C,
+ 0x3BC
+};
+
+static const U32 IVCF_AUX_TABLE_4[] = {
0xE2,
0x17F
};
-static const U32 IVCF_AUX_TABLE_4[] = {
+static const U32 IVCF_AUX_TABLE_5[] = {
0x1C4,
0x1C5
};
-static const U32 IVCF_AUX_TABLE_5[] = {
+static const U32 IVCF_AUX_TABLE_6[] = {
0x1C7,
0x1C8
};
-static const U32 IVCF_AUX_TABLE_6[] = {
+static const U32 IVCF_AUX_TABLE_7[] = {
0x1CA,
0x1CB
};
-static const U32 IVCF_AUX_TABLE_7[] = {
+static const U32 IVCF_AUX_TABLE_8[] = {
0x1F1,
0x1F2
};
-static const U32 IVCF_AUX_TABLE_8[] = {
+static const U32 IVCF_AUX_TABLE_9[] = {
0x392,
0x3D0
};
-static const U32 IVCF_AUX_TABLE_9[] = {
+static const U32 IVCF_AUX_TABLE_10[] = {
0x395,
0x3F5
};
-static const U32 IVCF_AUX_TABLE_10[] = {
+static const U32 IVCF_AUX_TABLE_11[] = {
0x398,
0x3D1,
0x3F4
};
-static const U32 IVCF_AUX_TABLE_11[] = {
+static const U32 IVCF_AUX_TABLE_12[] = {
0x345,
0x399,
0x1FBE
};
-static const U32 IVCF_AUX_TABLE_12[] = {
+static const U32 IVCF_AUX_TABLE_13[] = {
0x39A,
0x3F0
};
-static const U32 IVCF_AUX_TABLE_13[] = {
+static const U32 IVCF_AUX_TABLE_14[] = {
0xA0,
0x39C
};
-static const U32 IVCF_AUX_TABLE_14[] = {
+static const U32 IVCF_AUX_TABLE_15[] = {
0x3A0,
0x3D6
};
-static const U32 IVCF_AUX_TABLE_15[] = {
+static const U32 IVCF_AUX_TABLE_16[] = {
0x3A1,
0x3F1
};
-static const U32 IVCF_AUX_TABLE_16[] = {
+static const U32 IVCF_AUX_TABLE_17[] = {
0x3A3,
0x3C2
};
-static const U32 IVCF_AUX_TABLE_17[] = {
+static const U32 IVCF_AUX_TABLE_18[] = {
0x3A6,
0x3D5
};
-static const U32 IVCF_AUX_TABLE_18[] = {
+static const U32 IVCF_AUX_TABLE_19[] = {
0x3A9,
0x2126
};
-static const U32 IVCF_AUX_TABLE_19[] = {
+static const U32 IVCF_AUX_TABLE_20[] = {
0x412,
0x1C80
};
-static const U32 IVCF_AUX_TABLE_20[] = {
+static const U32 IVCF_AUX_TABLE_21[] = {
0x414,
0x1C81
};
-static const U32 IVCF_AUX_TABLE_21[] = {
+static const U32 IVCF_AUX_TABLE_22[] = {
0x41E,
0x1C82
};
-static const U32 IVCF_AUX_TABLE_22[] = {
+static const U32 IVCF_AUX_TABLE_23[] = {
0x421,
0x1C83
};
-static const U32 IVCF_AUX_TABLE_23[] = {
+static const U32 IVCF_AUX_TABLE_24[] = {
0x422,
0x1C84,
0x1C85
};
-static const U32 IVCF_AUX_TABLE_24[] = {
+static const U32 IVCF_AUX_TABLE_25[] = {
0x42A,
0x1C86
};
-static const U32 IVCF_AUX_TABLE_25[] = {
+static const U32 IVCF_AUX_TABLE_26[] = {
0x462,
0x1C87
};
-static const U32 IVCF_AUX_TABLE_26[] = {
+static const U32 IVCF_AUX_TABLE_27[] = {
0x1E60,
0x1E9B
};
-static const U32 IVCF_AUX_TABLE_27[] = {
+static const U32 IVCF_AUX_TABLE_28[] = {
0x1C88,
0xA64A
};
@@ -37013,7 +37045,8 @@ static const U32 * const IVCF_AUX_TABLE_ptrs[] = {
IVCF_AUX_TABLE_24,
IVCF_AUX_TABLE_25,
IVCF_AUX_TABLE_26,
- IVCF_AUX_TABLE_27
+ IVCF_AUX_TABLE_27,
+ IVCF_AUX_TABLE_28
};
/* Parallel table to the above, giving the number of elements in each table
@@ -37030,9 +37063,9 @@ static const U8 IVCF_AUX_TABLE_lengths[] = {
2 /* IVCF_AUX_TABLE_7 */,
2 /* IVCF_AUX_TABLE_8 */,
2 /* IVCF_AUX_TABLE_9 */,
- 3 /* IVCF_AUX_TABLE_10 */,
+ 2 /* IVCF_AUX_TABLE_10 */,
3 /* IVCF_AUX_TABLE_11 */,
- 2 /* IVCF_AUX_TABLE_12 */,
+ 3 /* IVCF_AUX_TABLE_12 */,
2 /* IVCF_AUX_TABLE_13 */,
2 /* IVCF_AUX_TABLE_14 */,
2 /* IVCF_AUX_TABLE_15 */,
@@ -37043,11 +37076,12 @@ static const U8 IVCF_AUX_TABLE_lengths[] = {
2 /* IVCF_AUX_TABLE_20 */,
2 /* IVCF_AUX_TABLE_21 */,
2 /* IVCF_AUX_TABLE_22 */,
- 3 /* IVCF_AUX_TABLE_23 */,
- 2 /* IVCF_AUX_TABLE_24 */,
+ 2 /* IVCF_AUX_TABLE_23 */,
+ 3 /* IVCF_AUX_TABLE_24 */,
2 /* IVCF_AUX_TABLE_25 */,
2 /* IVCF_AUX_TABLE_26 */,
- 2 /* IVCF_AUX_TABLE_27 */
+ 2 /* IVCF_AUX_TABLE_27 */,
+ 2 /* IVCF_AUX_TABLE_28 */
};
static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 037 */
@@ -37072,6 +37106,8 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 037 */
0x9E,
0,
IVCF_use_AUX_TABLE_3,
+ 0,
+ IVCF_use_AUX_TABLE_4,
0xE3,
0,
0xEB,
@@ -37242,12 +37278,12 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 037 */
0,
0x1F7,
0,
- IVCF_use_AUX_TABLE_4,
- 0,
IVCF_use_AUX_TABLE_5,
0,
IVCF_use_AUX_TABLE_6,
0,
+ IVCF_use_AUX_TABLE_7,
+ 0,
0x1CD,
0,
0x1CF,
@@ -37283,7 +37319,7 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 037 */
0,
0x1EE,
0,
- IVCF_use_AUX_TABLE_7,
+ IVCF_use_AUX_TABLE_8,
0,
0x1F4,
0,
@@ -37426,24 +37462,24 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 037 */
0x388,
0x1FE3,
0x391,
- IVCF_use_AUX_TABLE_8,
- 0x393,
IVCF_use_AUX_TABLE_9,
- 0x396,
+ 0x393,
IVCF_use_AUX_TABLE_10,
+ 0x396,
IVCF_use_AUX_TABLE_11,
IVCF_use_AUX_TABLE_12,
- 0x39B,
IVCF_use_AUX_TABLE_13,
- 0x39D,
+ 0x39B,
IVCF_use_AUX_TABLE_14,
+ 0x39D,
IVCF_use_AUX_TABLE_15,
- 0,
IVCF_use_AUX_TABLE_16,
- 0x3A4,
+ 0,
IVCF_use_AUX_TABLE_17,
- 0x3A7,
+ 0x3A4,
IVCF_use_AUX_TABLE_18,
+ 0x3A7,
+ IVCF_use_AUX_TABLE_19,
0x3AA,
0x38C,
0x38E,
@@ -37482,22 +37518,22 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 037 */
0x3FA,
0,
0x410,
- IVCF_use_AUX_TABLE_19,
- 0x413,
IVCF_use_AUX_TABLE_20,
- 0x415,
+ 0x413,
IVCF_use_AUX_TABLE_21,
- 0x41F,
+ 0x415,
IVCF_use_AUX_TABLE_22,
+ 0x41F,
IVCF_use_AUX_TABLE_23,
- 0x423,
IVCF_use_AUX_TABLE_24,
+ 0x423,
+ IVCF_use_AUX_TABLE_25,
0x42B,
0x400,
0,
0x460,
0,
- IVCF_use_AUX_TABLE_25,
+ IVCF_use_AUX_TABLE_26,
0,
0x464,
0,
@@ -37805,7 +37841,7 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 037 */
0,
0x1E5E,
0,
- IVCF_use_AUX_TABLE_26,
+ IVCF_use_AUX_TABLE_27,
0,
0x1E62,
0,
@@ -38160,7 +38196,7 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 037 */
0,
0xA648,
0,
- IVCF_use_AUX_TABLE_27,
+ IVCF_use_AUX_TABLE_28,
0,
0xA64C,
0,
@@ -419864,9 +419900,9 @@ static const U8 WB_table[23][23] = {
* baba9dfc133e3cb770a89aaf0973b1341fa61c2da6c176baf6428898b3b568d8 lib/unicore/extracted/DLineBreak.txt
* 6d4a8c945dd7db83ed617cbb7d937de7f4ecf016ff22970d846e996a7c9a2a5d lib/unicore/extracted/DNumType.txt
* 5b7c14380d5cceeaffcfbc18db1ed936391d2af2d51f5a41f1a17b692c77e59b lib/unicore/extracted/DNumValues.txt
- * ee0dd174fd5b158d82dfea95d7d822ca0bfcd490182669353dca3ab39a8ee807 lib/unicore/mktables
+ * 28076ceb3f4e2514ea9db243f4b918b9a7c2807b036237e2276b99b2659d9474 lib/unicore/mktables
* 50b85a67451145545a65cea370dab8d3444fbfe07e9c34cef560c5b7da9d3eef lib/unicore/version
- * 2680b9254eb236c5c090f11b149605043e8c8433661b96efc4a42fb4709342a5 regen/charset_translations.pl
- * 6bbad21de0848e0236b02f34f5fa0edd3cdae9ba8173cc9469a5513936b9e728 regen/mk_PL_charclass.pl
- * 7a7e778e903508b1c244a77bae57ec57606ab775bb5f81719dbb122eb66d4259 regen/mk_invlists.pl
+ * 24120d5e0c9685c442c93bc1dbea9b85ef973bf8e9474baf0e55b160c288226b regen/charset_translations.pl
+ * 9f74e34278592ddf58fef8c32236b294e94ea5e12627f911f4563e8040a07292 regen/mk_PL_charclass.pl
+ * 5eb9e6c825496cc9aa705e3cd33bc6d5a9657dcca16d4c4acc4824ff30b34a26 regen/mk_invlists.pl
* ex: set ro: */
diff --git a/Master/tlpkg/tlperl/lib/CORE/config.h b/Master/tlpkg/tlperl/lib/CORE/config.h
index 992116833f7..84e91f8092a 100644
--- a/Master/tlpkg/tlperl/lib/CORE/config.h
+++ b/Master/tlpkg/tlperl/lib/CORE/config.h
@@ -9,7 +9,7 @@
/* Package name : perl5
* Source directory :
- * Configuration time: Tue Feb 23 20:23:57 2021
+ * Configuration time: Tue Mar 1 12:42:18 2022
* Configured by : siepo
* Target system :
*/
@@ -216,11 +216,11 @@
* This symbol, if defined, indicates that the lstat routine is
* available to do file stats on symbolic links.
*/
-/*#define HAS_LSTAT / **/
+#define HAS_LSTAT /**/
/* HAS_MBLEN:
* This symbol, if defined, indicates that the mblen routine is available
- * to find the number of bytes in a multibye character.
+ * to find the number of bytes in a multibyte character.
*/
#define HAS_MBLEN /**/
@@ -342,7 +342,7 @@
* This symbol, if defined, indicates that the readlink routine is
* available to read the value of a symbolic link.
*/
-/*#define HAS_READLINK / **/
+#define HAS_READLINK /**/
/* HAS_REGCOMP:
* This symbol, if defined, indicates that the regcomp() routine is
@@ -500,7 +500,7 @@
* This symbol, if defined, indicates that the symlink routine is available
* to create symbolic links.
*/
-/*#define HAS_SYMLINK / **/
+#define HAS_SYMLINK /**/
/* HAS_SYSCALL:
* This symbol, if defined, indicates that the syscall routine is
@@ -1369,7 +1369,7 @@
* feature tests from Configure are generally more reliable.
*/
#define OSNAME "MSWin32" /**/
-#define OSVERS "10.0.19042.804" /**/
+#define OSVERS "10.0.19042.508" /**/
/* CAT2:
* This macro concatenates 2 tokens together.
@@ -1732,6 +1732,8 @@
* LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE
* LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_BE
* LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_LE
+ * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN
+ * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN
* LONG_DOUBLE_IS_VAX_H_FLOAT
* LONG_DOUBLE_IS_UNKNOWN_FORMAT
* It is only defined if the system supports long doubles.
@@ -1969,11 +1971,11 @@
* This symbol, if defined, indicates that the union semun is
* defined by including <sys/sem.h>. If not, the user code
* probably needs to define it as:
- * union semun {
+ * union semun {
* int val;
* struct semid_ds *buf;
* unsigned short *array;
- * }
+ * }
*/
/* USE_SEMCTL_SEMUN:
* This symbol, if defined, indicates that union semun is
@@ -2984,7 +2986,7 @@
/* HAS_MEMMEM:
* This symbol, if defined, indicates that the memmem routine is
- * available to return a pointer to the start of the first occurance
+ * available to return a pointer to the start of the first occurrence
* of a substring in a memory area (or NULL if not found).
* In glibc, memmem is a GNU extension. The function is visible in
* libc, but the prototype is only visible if _GNU_SOURCE is #defined.
@@ -4212,6 +4214,12 @@
*/
/*#define USE_C_BACKTRACE / **/
+/* USE_STRICT_BY_DEFAULT:
+ * This symbol, if defined, enables additional defaults.
+ * At this time it only enables implicit strict by default.
+ */
+/*#define USE_STRICT_BY_DEFAULT / * use strict by default */
+
/* USE_DTRACE:
* This symbol, if defined, indicates that Perl should
* be built with support for DTrace.
@@ -4532,6 +4540,19 @@
/*#define HAS_ENDSERVENT_R / **/
#define ENDSERVENT_R_PROTO 0 /**/
+/* GETENV_PRESERVES_OTHER_THREAD:
+ * This symbol, if defined, indicates that the getenv system call doesn't
+ * zap the static buffer of getenv() in a different thread.
+ *
+ * The typical getenv() implementation will return a pointer to the proper
+ * position in **environ. But some may instead copy them to a static
+ * buffer in getenv(). If there is a per-thread instance of that buffer,
+ * or the return points to **environ, then a many-reader/1-writer mutex
+ * will work; otherwise an exclusive locking mutex is required to prevent
+ * races.
+ */
+#define GETENV_PRESERVES_OTHER_THREAD /**/
+
/* HAS_GETGRENT_R:
* This symbol, if defined, indicates that the getgrent_r routine
* is available to getgrent re-entrantly.
@@ -4828,6 +4849,9 @@
#define L_R_TZSET
#endif
+/* L_R_TZSET:
+ * If localtime_r() needs tzset, it is defined in this define
+ */
/* LOCALTIME_R_PROTO:
* This symbol encodes the prototype of localtime_r.
* It is zero if d_localtime_r is undef, and one of the
@@ -5119,10 +5143,11 @@
* This symbol, if defined, indicates that Perl should be built to
* use the interpreter-based threading implementation.
*/
-/* USE_5005THREADS:
- * This symbol, if defined, indicates that Perl should be built to
- * use the 5.005-based threading implementation.
- * Only valid up to 5.8.x.
+/* USE_THREADS:
+ * This symbol, if defined, indicates that Perl should
+ * be built to use threads. At present, it is a synonym for
+ * and USE_ITHREADS, but eventually the source ought to be
+ * changed to use this to mean _any_ threading implementation.
*/
/* OLD_PTHREADS_API:
* This symbol, if defined, indicates that Perl should
@@ -5133,11 +5158,8 @@
* try to use the various _r versions of library functions.
* This is extremely experimental.
*/
-/*#define USE_5005THREADS / **/
#define USE_ITHREADS /**/
-#if defined(USE_5005THREADS) && !defined(USE_ITHREADS)
-#define USE_THREADS /* until src is revised*/
-#endif
+#define USE_THREADS /**/
/*#define OLD_PTHREADS_API / **/
/*#define USE_REENTRANT_API / **/
diff --git a/Master/tlpkg/tlperl/lib/CORE/cop.h b/Master/tlpkg/tlperl/lib/CORE/cop.h
index e16875ad2cf..b5f30bd0415 100644
--- a/Master/tlpkg/tlperl/lib/CORE/cop.h
+++ b/Master/tlpkg/tlperl/lib/CORE/cop.h
@@ -166,12 +166,13 @@ typedef struct jmpenv JMPENV;
} STMT_END
/*
-=head1 COP Hint Hashes
+=for apidoc_section $COP
*/
typedef struct refcounted_he COPHH;
#define COPHH_KEY_UTF8 REFCOUNTED_HE_KEY_UTF8
+#define COPHH_EXISTS REFCOUNTED_HE_EXISTS
/*
=for apidoc Amx|SV *|cophh_fetch_pvn|const COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|U32 flags
@@ -229,6 +230,58 @@ string/length pair.
Perl_refcounted_he_fetch_sv(aTHX_ cophh, key, hash, flags)
/*
+=for apidoc Amx|bool|cophh_exists_pvn|const COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|U32 flags
+
+Look up the entry in the cop hints hash C<cophh> with the key specified by
+C<keypv> and C<keylen>. If C<flags> has the C<COPHH_KEY_UTF8> bit set,
+the key octets are interpreted as UTF-8, otherwise they are interpreted
+as Latin-1. C<hash> is a precomputed hash of the key string, or zero if
+it has not been precomputed. Returns true if a value exists, and false
+otherwise.
+
+=cut
+*/
+
+#define cophh_exists_pvn(cophh, keypv, keylen, hash, flags) \
+ cBOOL(Perl_refcounted_he_fetch_pvn(aTHX_ cophh, keypv, keylen, hash, flags | COPHH_EXISTS))
+
+/*
+=for apidoc Amx|bool|cophh_exists_pvs|const COPHH *cophh|"key"|U32 flags
+
+Like L</cophh_exists_pvn>, but takes a literal string instead
+of a string/length pair, and no precomputed hash.
+
+=cut
+*/
+
+#define cophh_exists_pvs(cophh, key, flags) \
+ cBOOL(Perl_refcounted_he_fetch_pvn(aTHX_ cophh, STR_WITH_LEN(key), 0, flags | COPHH_EXISTS))
+
+/*
+=for apidoc Amx|bool|cophh_exists_pv|const COPHH *cophh|const char *key|U32 hash|U32 flags
+
+Like L</cophh_exists_pvn>, but takes a nul-terminated string instead of
+a string/length pair.
+
+=cut
+*/
+
+#define cophh_exists_pv(cophh, key, hash, flags) \
+ cBOOL(Perl_refcounted_he_fetch_pv(aTHX_ cophh, key, hash, flags | COPHH_EXISTS))
+
+/*
+=for apidoc Amx|bool|cophh_exists_sv|const COPHH *cophh|SV *key|U32 hash|U32 flags
+
+Like L</cophh_exists_pvn>, but takes a Perl scalar instead of a
+string/length pair.
+
+=cut
+*/
+
+#define cophh_exists_sv(cophh, key, hash, flags) \
+ cBOOL(Perl_refcounted_he_fetch_sv(aTHX_ cophh, key, hash, flags | COPHH_EXISTS))
+
+/*
=for apidoc Amx|HV *|cophh_2hv|const COPHH *cophh|U32 flags
Generates and returns a standard Perl hash representing the full set of
@@ -299,7 +352,7 @@ be stored with referential integrity, but will be coerced to strings.
Perl_refcounted_he_new_pvn(aTHX_ cophh, keypv, keylen, hash, value, flags)
/*
-=for apidoc Amx|COPHH *|cophh_store_pvs|const COPHH *cophh|"key"|SV *value|U32 flags
+=for apidoc Amx|COPHH *|cophh_store_pvs|COPHH *cophh|"key"|SV *value|U32 flags
Like L</cophh_store_pvn>, but takes a literal string instead
of a string/length pair, and no precomputed hash.
@@ -311,7 +364,7 @@ of a string/length pair, and no precomputed hash.
Perl_refcounted_he_new_pvn(aTHX_ cophh, STR_WITH_LEN(key), 0, value, flags)
/*
-=for apidoc Amx|COPHH *|cophh_store_pv|const COPHH *cophh|const char *key|U32 hash|SV *value|U32 flags
+=for apidoc Amx|COPHH *|cophh_store_pv|COPHH *cophh|const char *key|U32 hash|SV *value|U32 flags
Like L</cophh_store_pvn>, but takes a nul-terminated string instead of
a string/length pair.
@@ -323,7 +376,7 @@ a string/length pair.
Perl_refcounted_he_new_pv(aTHX_ cophh, key, hash, value, flags)
/*
-=for apidoc Amx|COPHH *|cophh_store_sv|const COPHH *cophh|SV *key|U32 hash|SV *value|U32 flags
+=for apidoc Amx|COPHH *|cophh_store_sv|COPHH *cophh|SV *key|U32 hash|SV *value|U32 flags
Like L</cophh_store_pvn>, but takes a Perl scalar instead of a
string/length pair.
@@ -356,7 +409,7 @@ hash of the key string, or zero if it has not been precomputed.
(SV *)NULL, flags)
/*
-=for apidoc Amx|COPHH *|cophh_delete_pvs|const COPHH *cophh|"key"|U32 flags
+=for apidoc Amx|COPHH *|cophh_delete_pvs|COPHH *cophh|"key"|U32 flags
Like L</cophh_delete_pvn>, but takes a literal string instead
of a string/length pair, and no precomputed hash.
@@ -369,7 +422,7 @@ of a string/length pair, and no precomputed hash.
(SV *)NULL, flags)
/*
-=for apidoc Amx|COPHH *|cophh_delete_pv|const COPHH *cophh|const char *key|U32 hash|U32 flags
+=for apidoc Amx|COPHH *|cophh_delete_pv|COPHH *cophh|char *key|U32 hash|U32 flags
Like L</cophh_delete_pvn>, but takes a nul-terminated string instead of
a string/length pair.
@@ -381,7 +434,7 @@ a string/length pair.
Perl_refcounted_he_new_pv(aTHX_ cophh, key, hash, (SV *)NULL, flags)
/*
-=for apidoc Amx|COPHH *|cophh_delete_sv|const COPHH *cophh|SV *key|U32 hash|U32 flags
+=for apidoc Amx|COPHH *|cophh_delete_sv|COPHH *cophh|SV *key|U32 hash|U32 flags
Like L</cophh_delete_pvn>, but takes a Perl scalar instead of a
string/length pair.
@@ -403,10 +456,10 @@ struct cop {
#ifdef USE_ITHREADS
PADOFFSET cop_stashoff; /* offset into PL_stashpad, for the
package the line was compiled in */
- char * cop_file; /* file name the following line # is from */
+ char * cop_file; /* name of file this command is from */
#else
HV * cop_stash; /* package line was compiled in */
- GV * cop_filegv; /* file the following line # is from */
+ GV * cop_filegv; /* name of GV file this command is from */
#endif
U32 cop_hints; /* hints bits from pragmata */
U32 cop_seq; /* parse sequence number */
@@ -423,6 +476,49 @@ struct cop {
U32 cop_features;
};
+/*
+=for apidoc Am|const char *|CopFILE|const COP * c
+Returns the name of the file associated with the C<COP> C<c>
+
+=for apidoc Am|STRLEN|CopLINE|const COP * c
+Returns the line number in the source code associated with the C<COP> C<c>
+
+=for apidoc Am|AV *|CopFILEAV|const COP * c
+Returns the AV associated with the C<COP> C<c>
+
+=for apidoc Am|SV *|CopFILESV|const COP * c
+Returns the SV associated with the C<COP> C<c>
+
+=for apidoc Am|void|CopFILE_set|COP * c|const char * pv
+Makes C<pv> the name of the file associated with the C<COP> C<c>
+
+=for apidoc Am|GV *|CopFILEGV|const COP * c
+Returns the GV associated with the C<COP> C<c>
+
+=for apidoc CopFILEGV_set
+Available only on unthreaded perls. Makes C<pv> the name of the file
+associated with the C<COP> C<c>
+
+=for apidoc Am|HV *|CopSTASH|const COP * c
+Returns the stash associated with C<c>.
+
+=for apidoc Am|bool|CopSTASH_eq|const COP * c|const HV * hv
+Returns a boolean as to whether or not C<hv> is the stash associated with C<c>.
+
+=for apidoc Am|bool|CopSTASH_set|COP * c|HV * hv
+Set the stash associated with C<c> to C<hv>.
+
+=for apidoc Am|char *|CopSTASHPV|const COP * c
+Returns the package name of the stash associated with C<c>, or C<NULL> if no
+associated stash
+
+=for apidoc Am|void|CopSTASHPV_set|COP * c|const char * pv
+Set the package name of the stash associated with C<c>, to the NUL-terminated C
+string C<p>, creating the package if necessary.
+
+=cut
+*/
+
#ifdef USE_ITHREADS
# define CopFILE(c) ((c)->cop_file)
# define CopFILEGV(c) (CopFILE(c) \
@@ -452,7 +548,7 @@ struct cop {
# else
# define CopFILE_free(c) (PerlMemShared_free(CopFILE(c)),(CopFILE(c) = NULL))
# endif
-#else
+#else /* Above: no threads; Below yes threads */
# define CopFILEGV(c) ((c)->cop_filegv)
# define CopFILEGV_set(c,gv) ((c)->cop_filegv = (GV*)SvREFCNT_inc(gv))
# define CopFILE_set(c,pv) CopFILEGV_set((c), gv_fetchfile(pv))
@@ -464,7 +560,7 @@ struct cop {
# else
# define CopFILEAVx(c) (GvAV(CopFILEGV(c)))
# endif
-# define CopFILE(c) (CopFILEGV(c) \
+# define CopFILE(c) (CopFILEGV(c) /* +2 for '_<' */ \
? GvNAME(CopFILEGV(c))+2 : NULL)
# define CopSTASH(c) ((c)->cop_stash)
# define CopSTASH_set(c,hv) ((c)->cop_stash = (hv))
@@ -481,10 +577,6 @@ struct cop {
#define CopHINTHASH_set(c,h) ((c)->cop_hints_hash = (h))
/*
-=head1 COP Hint Reading
-*/
-
-/*
=for apidoc Am|SV *|cop_hints_fetch_pvn|const COP *cop|const char *keypv|STRLEN keylen|U32 hash|U32 flags
Look up the hint entry in the cop C<cop> with the key specified by
@@ -538,6 +630,58 @@ string/length pair.
cophh_fetch_sv(CopHINTHASH_get(cop), key, hash, flags)
/*
+=for apidoc Am|bool|cop_hints_exists_pvn|const COP *cop|const char *keypv|STRLEN keylen|U32 hash|U32 flags
+
+Look up the hint entry in the cop C<cop> with the key specified by
+C<keypv> and C<keylen>. If C<flags> has the C<COPHH_KEY_UTF8> bit set,
+the key octets are interpreted as UTF-8, otherwise they are interpreted
+as Latin-1. C<hash> is a precomputed hash of the key string, or zero if
+it has not been precomputed. Returns true if a value exists, and false
+otherwise.
+
+=cut
+*/
+
+#define cop_hints_exists_pvn(cop, keypv, keylen, hash, flags) \
+ cophh_exists_pvn(CopHINTHASH_get(cop), keypv, keylen, hash, flags)
+
+/*
+=for apidoc Am|bool|cop_hints_exists_pvs|const COP *cop|"key"|U32 flags
+
+Like L</cop_hints_exists_pvn>, but takes a literal string
+instead of a string/length pair, and no precomputed hash.
+
+=cut
+*/
+
+#define cop_hints_exists_pvs(cop, key, flags) \
+ cophh_exists_pvs(CopHINTHASH_get(cop), key, flags)
+
+/*
+=for apidoc Am|bool|cop_hints_exists_pv|const COP *cop|const char *key|U32 hash|U32 flags
+
+Like L</cop_hints_exists_pvn>, but takes a nul-terminated string instead
+of a string/length pair.
+
+=cut
+*/
+
+#define cop_hints_exists_pv(cop, key, hash, flags) \
+ cophh_exists_pv(CopHINTHASH_get(cop), key, hash, flags)
+
+/*
+=for apidoc Am|bool|cop_hints_exists_sv|const COP *cop|SV *key|U32 hash|U32 flags
+
+Like L</cop_hints_exists_pvn>, but takes a Perl scalar instead of a
+string/length pair.
+
+=cut
+*/
+
+#define cop_hints_exists_sv(cop, key, hash, flags) \
+ cophh_exists_sv(CopHINTHASH_get(cop), key, hash, flags)
+
+/*
=for apidoc Am|HV *|cop_hints_2hv|const COP *cop|U32 flags
Generates and returns a standard Perl hash representing the full set of
@@ -636,12 +780,6 @@ struct block_format {
# define CX_POP(cx) cxstack_ix--;
#endif
-
-/* base for the next two macros. Don't use directly.
- * The context frame holds a reference to the CV so that it can't be
- * freed while we're executing it */
-
-
#define CX_PUSHSUB_GET_LVALUE_MASK(func) \
/* If the context is indeterminate, then only the lvalue */ \
/* flags that the caller also has are applicable. */ \
@@ -828,6 +966,9 @@ struct subst {
void * sbu_rxres;
REGEXP * sbu_rx;
};
+
+#ifdef PERL_CORE
+
#define sb_iters cx_u.cx_subst.sbu_iters
#define sb_maxiters cx_u.cx_subst.sbu_maxiters
#define sb_rflags cx_u.cx_subst.sbu_rflags
@@ -841,7 +982,6 @@ struct subst {
#define sb_rxres cx_u.cx_subst.sbu_rxres
#define sb_rx cx_u.cx_subst.sbu_rx
-#ifdef PERL_CORE
# define CX_PUSHSUBST(cx) CXINC, cx = CX_CUR(), \
cx->blk_oldsaveix = oldsave, \
cx->sb_iters = iters, \
@@ -905,7 +1045,7 @@ struct context {
or plain block { ...; } */
#define CXt_SUB 9
#define CXt_FORMAT 10
-#define CXt_EVAL 11
+#define CXt_EVAL 11 /* eval'', eval{}, try{} */
#define CXt_SUBST 12
/* SUBST doesn't feature in all switch statements. */
@@ -918,7 +1058,8 @@ struct context {
/* private flags for CXt_EVAL */
#define CXp_REAL 0x20 /* truly eval'', not a lookalike */
-#define CXp_TRYBLOCK 0x40 /* eval{}, not eval'' or similar */
+#define CXp_EVALBLOCK 0x40 /* eval{}, not eval'' or similar */
+#define CXp_TRY 0x80 /* try {} block */
/* private flags for CXt_LOOP */
@@ -940,45 +1081,18 @@ struct context {
#define CxMULTICALL(c) ((c)->cx_type & CXp_MULTICALL)
#define CxREALEVAL(c) (((c)->cx_type & (CXTYPEMASK|CXp_REAL)) \
== (CXt_EVAL|CXp_REAL))
-#define CxTRYBLOCK(c) (((c)->cx_type & (CXTYPEMASK|CXp_TRYBLOCK)) \
- == (CXt_EVAL|CXp_TRYBLOCK))
+#define CxEVALBLOCK(c) (((c)->cx_type & (CXTYPEMASK|CXp_EVALBLOCK)) \
+ == (CXt_EVAL|CXp_EVALBLOCK))
+#define CxTRY(c) (((c)->cx_type & (CXTYPEMASK|CXp_TRY)) \
+ == (CXt_EVAL|CXp_TRY))
#define CxFOREACH(c) ( CxTYPE(cx) >= CXt_LOOP_ARY \
&& CxTYPE(cx) <= CXt_LOOP_LIST)
-#define CXINC (cxstack_ix < cxstack_max ? ++cxstack_ix : (cxstack_ix = cxinc()))
-
-/*
-=head1 "Gimme" Values
-*/
-
-/*
-=for apidoc AmnU||G_SCALAR
-Used to indicate scalar context. See C<L</GIMME_V>>, C<L</GIMME>>, and
-L<perlcall>.
-
-=for apidoc AmnU||G_ARRAY
-Used to indicate list context. See C<L</GIMME_V>>, C<L</GIMME>> and
-L<perlcall>.
-
-=for apidoc AmnU||G_VOID
-Used to indicate void context. See C<L</GIMME_V>> and L<perlcall>.
-
-=for apidoc AmnU||G_DISCARD
-Indicates that arguments returned from a callback should be discarded. See
-L<perlcall>.
+/* deprecated old name before real try/catch was added */
+#define CXp_TRYBLOCK CXp_EVALBLOCK
+#define CxTRYBLOCK(c) CxEVALBLOCK(c)
-=for apidoc AmnU||G_EVAL
-
-Used to force a Perl C<eval> wrapper around a callback. See
-L<perlcall>.
-
-=for apidoc AmnU||G_NOARGS
-
-Indicates that no arguments are being sent to a callback. See
-L<perlcall>.
-
-=cut
-*/
+#define CXINC (cxstack_ix < cxstack_max ? ++cxstack_ix : (cxstack_ix = cxinc()))
#define G_SCALAR 2
#define G_ARRAY 3
@@ -1054,6 +1168,12 @@ struct stackinfo {
};
+/*
+=for apidoc Ay||PERL_SI
+Use this typedef to declare variables that are to hold C<struct stackinfo>.
+
+=cut
+*/
typedef struct stackinfo PERL_SI;
#define cxstack (PL_curstackinfo->si_cxstack)
@@ -1125,14 +1245,23 @@ typedef struct stackinfo PERL_SI;
} \
} STMT_END
-#define IN_PERL_COMPILETIME cBOOL(PL_curcop == &PL_compiling)
-#define IN_PERL_RUNTIME cBOOL(PL_curcop != &PL_compiling)
-
+/*
+=for apidoc_section $utility
+=for apidoc Amn|bool|IN_PERL_COMPILETIME
+Returns 1 if this macro is being called during the compilation phase of the
+program; otherwise 0;
+=for apidoc Amn|bool|IN_PERL_RUNTIME
+Returns 1 if this macro is being called during the execution phase of the
+program; otherwise 0;
+=cut
+*/
+#define IN_PERL_COMPILETIME cBOOL(PL_curcop == &PL_compiling)
+#define IN_PERL_RUNTIME cBOOL(PL_curcop != &PL_compiling)
/*
-=head1 Multicall Functions
+=for apidoc_section $multicall
=for apidoc Amns||dMULTICALL
Declare local variables for a multicall. See L<perlcall/LIGHTWEIGHT CALLBACKS>.
diff --git a/Master/tlpkg/tlperl/lib/CORE/cv.h b/Master/tlpkg/tlperl/lib/CORE/cv.h
index 9a169e865cf..435dee62612 100644
--- a/Master/tlpkg/tlperl/lib/CORE/cv.h
+++ b/Master/tlpkg/tlperl/lib/CORE/cv.h
@@ -16,18 +16,13 @@ struct xpvcv {
};
/*
-=head1 Handy Values
+=for apidoc Ayh||CV
=for apidoc ADmnU||Nullcv
Null CV pointer.
(deprecated - use C<(CV *)NULL> instead)
-=head1 CV Manipulation Functions
-
-This section documents functions to manipulate CVs which are code-values,
-or subroutines. For more information, see L<perlguts>.
-
=for apidoc Am|HV*|CvSTASH|CV* cv
Returns the stash of the CV. A stash is the symbol table hash, containing
the package-scoped variables in the package where the subroutine was defined.
@@ -68,7 +63,7 @@ See L<perlguts/Autoloading with XSUBs>.
/* these CvPADLIST/CvRESERVED asserts can be reverted one day, once stabilized */
#define CvPADLIST(sv) (*(assert_(!CvISXSUB((CV*)(sv))) \
- &(((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_padlist_u.xcv_padlist)))
+ &(((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_padlist_u.xcv_padlist)))
/* CvPADLIST_set is not public API, it can be removed one day, once stabilized */
#ifdef DEBUGGING
# define CvPADLIST_set(sv, padlist) Perl_set_padlist((CV*)sv, padlist)
@@ -76,7 +71,7 @@ See L<perlguts/Autoloading with XSUBs>.
# define CvPADLIST_set(sv, padlist) (CvPADLIST(sv) = (padlist))
#endif
#define CvHSCXT(sv) *(assert_(CvISXSUB((CV*)(sv))) \
- &(((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_padlist_u.xcv_hscxt))
+ &(((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_padlist_u.xcv_hscxt))
#ifdef DEBUGGING
# if PTRSIZE == 8
# define PoisonPADLIST(sv) \
@@ -97,20 +92,20 @@ See L<perlguts/Autoloading with XSUBs>.
/* These two are sometimes called on non-CVs */
#define CvPROTO(sv) \
- ( \
- SvPOK(sv) \
- ? SvTYPE(sv) == SVt_PVCV && CvAUTOLOAD(sv) \
- ? SvEND(sv)+1 : SvPVX_const(sv) \
- : NULL \
- )
+ ( \
+ SvPOK(sv) \
+ ? SvTYPE(sv) == SVt_PVCV && CvAUTOLOAD(sv) \
+ ? SvEND(sv)+1 : SvPVX_const(sv) \
+ : NULL \
+ )
#define CvPROTOLEN(sv) \
- ( \
- SvPOK(sv) \
- ? SvTYPE(sv) == SVt_PVCV && CvAUTOLOAD(sv) \
- ? SvLEN(sv)-SvCUR(sv)-2 \
- : SvCUR(sv) \
- : 0 \
- )
+ ( \
+ SvPOK(sv) \
+ ? SvTYPE(sv) == SVt_PVCV && CvAUTOLOAD(sv) \
+ ? SvLEN(sv)-SvCUR(sv)-2 \
+ : SvCUR(sv) \
+ : 0 \
+ )
#define CVf_METHOD 0x0001 /* CV is explicitly marked as a method */
#define CVf_LVALUE 0x0002 /* CV return value can be used as lvalue */
@@ -122,11 +117,11 @@ See L<perlguts/Autoloading with XSUBs>.
#define CVf_CLONED 0x0040 /* a clone of one of those */
#define CVf_ANON 0x0080 /* CV is not pointed to by a GV */
#define CVf_UNIQUE 0x0100 /* sub is only called once (eg PL_main_cv,
- * require, eval). */
+ * require, eval). */
#define CVf_NODEBUG 0x0200 /* no DB::sub indirection for this CV
- (esp. useful for special XSUBs) */
+ (esp. useful for special XSUBs) */
#define CVf_CVGV_RC 0x0400 /* CvGV is reference counted */
-#ifdef PERL_CORE
+#if defined(PERL_CORE) || defined(PERL_EXT)
# define CVf_SLABBED 0x0800 /* Holds refcount on op slab */
#endif
#define CVf_DYNFILE 0x1000 /* The filename is malloced */
@@ -231,8 +226,8 @@ PERL_STATIC_INLINE HEK *
CvNAME_HEK(CV *sv)
{
return CvNAMED(sv)
- ? ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_gv_u.xcv_hek
- : 0;
+ ? ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_gv_u.xcv_hek
+ : 0;
}
/* helper for the common pattern:
@@ -247,15 +242,14 @@ CvNAME_HEK(CV *sv)
/* This lowers the reference count of the previous value, but does *not*
increment the reference count of the new value. */
#define CvNAME_HEK_set(cv, hek) ( \
- CvNAME_HEK((CV *)(cv)) \
- ? unshare_hek(SvANY((CV *)(cv))->xcv_gv_u.xcv_hek) \
- : (void)0, \
- ((XPVCV*)MUTABLE_PTR(SvANY(cv)))->xcv_gv_u.xcv_hek = (hek), \
- CvNAMED_on(cv) \
+ CvNAME_HEK((CV *)(cv)) \
+ ? unshare_hek(SvANY((CV *)(cv))->xcv_gv_u.xcv_hek) \
+ : (void)0, \
+ ((XPVCV*)MUTABLE_PTR(SvANY(cv)))->xcv_gv_u.xcv_hek = (hek), \
+ CvNAMED_on(cv) \
)
/*
-=head1 CV reference counts and CvOUTSIDE
=for apidoc m|bool|CvWEAKOUTSIDE|CV *cv
diff --git a/Master/tlpkg/tlperl/lib/CORE/dirent.h b/Master/tlpkg/tlperl/lib/CORE/dirent.h
index 50378254257..9396743c0d9 100644
--- a/Master/tlpkg/tlperl/lib/CORE/dirent.h
+++ b/Master/tlpkg/tlperl/lib/CORE/dirent.h
@@ -24,21 +24,21 @@
/* structure of a directory entry */
typedef struct direct
{
- long d_ino; /* inode number (not used by MS-DOS) */
- long d_namlen; /* name length */
- char d_name[257]; /* file name */
+ long d_ino; /* inode number (not used by MS-DOS) */
+ long d_namlen; /* name length */
+ char d_name[257]; /* file name */
} _DIRECT;
/* structure for dir operations */
typedef struct _dir_struc
{
- char *start; /* starting position */
- char *curr; /* current position */
- long size; /* allocated size of string table */
- long nfiles; /* number of filenames in table */
- struct direct dirstr; /* directory structure to return */
- void* handle; /* system handle */
- char *end; /* position after last filename */
+ char *start; /* starting position */
+ char *curr; /* current position */
+ long size; /* allocated size of string table */
+ long nfiles; /* number of filenames in table */
+ struct direct dirstr; /* directory structure to return */
+ void* handle; /* system handle */
+ char *end; /* position after last filename */
} DIR;
#if 0 /* these have moved to win32iop.h */
diff --git a/Master/tlpkg/tlperl/lib/CORE/dosish.h b/Master/tlpkg/tlperl/lib/CORE/dosish.h
index 5b2716046d7..74aa1270556 100644
--- a/Master/tlpkg/tlperl/lib/CORE/dosish.h
+++ b/Master/tlpkg/tlperl/lib/CORE/dosish.h
@@ -17,7 +17,7 @@
# define BIT_BUCKET "nul"
# define OP_BINARY O_BINARY
# define PERL_SYS_INIT_BODY(c,v) \
- MALLOC_CHECK_TAINT2(*c,*v) Perl_DJGPP_init(c,v); PERLIO_INIT
+ MALLOC_CHECK_TAINT2(*c,*v) Perl_DJGPP_init(c,v); PERLIO_INIT
# define init_os_extras Perl_init_os_extras
# define HAS_UTIME
# define HAS_KILL
@@ -30,8 +30,8 @@
# define PERL_FS_VER_FMT "%d_%d_%d"
# endif
# define PERL_FS_VERSION STRINGIFY(PERL_REVISION) "_" \
- STRINGIFY(PERL_VERSION) "_" \
- STRINGIFY(PERL_SUBVERSION)
+ STRINGIFY(PERL_VERSION) "_" \
+ STRINGIFY(PERL_SUBVERSION)
#elif defined(WIN32)
# define PERL_SYS_INIT_BODY(c,v) \
MALLOC_CHECK_TAINT2(*c,*v) Perl_win32_init(c,v); PERLIO_INIT
@@ -70,10 +70,10 @@
* to include <sys/stat.h> and <sys/types.h> to get any typedef'ed
* information.
*/
-#if defined(WIN64) || defined(USE_LARGE_FILES)
-# define Stat_t struct _stati64
+#if defined(WIN32)
+# define Stat_t struct w32_stat
#else
-# define Stat_t struct stat
+# define Stat_t struct _stati64
#endif
/* USE_STAT_RDEV:
diff --git a/Master/tlpkg/tlperl/lib/CORE/ebcdic_tables.h b/Master/tlpkg/tlperl/lib/CORE/ebcdic_tables.h
index cf1beeb85e2..9182d504f23 100644
--- a/Master/tlpkg/tlperl/lib/CORE/ebcdic_tables.h
+++ b/Master/tlpkg/tlperl/lib/CORE/ebcdic_tables.h
@@ -44,9 +44,9 @@ SOFTWARE.
/* Index is ASCII platform code point; value is EBCDIC 1047 equivalent */
# ifndef DOINIT
- EXTCONST U8 PL_a2e[];
+ EXTCONST U8 PL_a2e[256];
# else
- EXTCONST U8 PL_a2e[] = {
+ EXTCONST U8 PL_a2e[256] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x37,0x2D,0x2E,0x2F,0x16,0x05,0x15,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x3C,0x3D,0x32,0x26,0x18,0x19,0x3F,0x27,0x1C,0x1D,0x1E,0x1F,
@@ -70,9 +70,9 @@ SOFTWARE.
/* Index is EBCDIC 1047 code point; value is ASCII platform equivalent */
# ifndef DOINIT
- EXTCONST U8 PL_e2a[];
+ EXTCONST U8 PL_e2a[256];
# else
- EXTCONST U8 PL_e2a[] = {
+ EXTCONST U8 PL_e2a[256] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x9C,0x09,0x86,0x7F,0x97,0x8D,0x8E,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x9D,0x0A,0x08,0x87,0x18,0x19,0x92,0x8F,0x1C,0x1D,0x1E,0x1F,
@@ -97,9 +97,9 @@ SOFTWARE.
/* (Confusingly named) Index is EBCDIC 1047 I8 byte; value is
* EBCDIC 1047 UTF-EBCDIC equivalent */
# ifndef DOINIT
- EXTCONST U8 PL_utf2e[];
+ EXTCONST U8 PL_utf2e[256];
# else
- EXTCONST U8 PL_utf2e[] = {
+ EXTCONST U8 PL_utf2e[256] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x37,0x2D,0x2E,0x2F,0x16,0x05,0x15,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x3C,0x3D,0x32,0x26,0x18,0x19,0x3F,0x27,0x1C,0x1D,0x1E,0x1F,
@@ -124,9 +124,9 @@ SOFTWARE.
/* (Confusingly named) Index is EBCDIC 1047 UTF-EBCDIC byte; value is
* EBCDIC 1047 I8 equivalent */
# ifndef DOINIT
- EXTCONST U8 PL_e2utf[];
+ EXTCONST U8 PL_e2utf[256];
# else
- EXTCONST U8 PL_e2utf[] = {
+ EXTCONST U8 PL_e2utf[256] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x9C,0x09,0x86,0x7F,0x97,0x8D,0x8E,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x9D,0x0A,0x08,0x87,0x18,0x19,0x92,0x8F,0x1C,0x1D,0x1E,0x1F,
@@ -153,9 +153,9 @@ SOFTWARE.
* flags table in tr16. The entries marked 9 in tr16 are continuation bytes
* and are marked as length 1 here so that we can recover. */
# ifndef DOINIT
- EXTCONST U8 PL_utf8skip[];
+ EXTCONST U8 PL_utf8skip[256];
# else
- EXTCONST U8 PL_utf8skip[] = {
+ EXTCONST U8 PL_utf8skip[256] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
/*1_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -179,9 +179,9 @@ SOFTWARE.
/* Index is EBCDIC 1047 code point; value is its lowercase equivalent */
# ifndef DOINIT
- EXTCONST U8 PL_latin1_lc[];
+ EXTCONST U8 PL_latin1_lc[256];
# else
- EXTCONST U8 PL_latin1_lc[] = {
+ EXTCONST U8 PL_latin1_lc[256] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
@@ -207,9 +207,9 @@ SOFTWARE.
* The 'mod' in the name means that codepoints whose uppercase is above 255 or
* longer than 1 character map to LATIN SMALL LETTER Y WITH DIARESIS */
# ifndef DOINIT
- EXTCONST U8 PL_mod_latin1_uc[];
+ EXTCONST U8 PL_mod_latin1_uc[256];
# else
- EXTCONST U8 PL_mod_latin1_uc[] = {
+ EXTCONST U8 PL_mod_latin1_uc[256] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
@@ -234,9 +234,34 @@ SOFTWARE.
/* Index is EBCDIC 1047 code point; For A-Z, value is a-z; for a-z, value
* is A-Z; all other code points map to themselves */
# ifndef DOINIT
- EXTCONST U8 PL_fold[];
+ EXTCONST U8 PL_fold[256];
# else
- EXTCONST U8 PL_fold[] = {
+ EXTCONST U8 PL_fold[256] = {
+/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
+/*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
+/*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
+/*2_*/0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
+/*3_*/0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
+/*4_*/0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
+/*5_*/0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
+/*6_*/0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
+/*7_*/0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
+/*8_*/0x80,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
+/*9_*/0x90,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
+/*A_*/0xA0,0xA1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
+/*B_*/0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
+/*C_*/0xC0,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
+/*D_*/0xD0,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
+/*E_*/0xE0,0xE1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
+/*F_*/0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF
+/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
+};
+# endif
+
+# ifndef DOINIT
+ EXT U8 PL_fold_locale[256];
+# else
+ EXT U8 PL_fold_locale[256] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
@@ -262,9 +287,9 @@ SOFTWARE.
* (A => a; a => A, etc) in the 0-255 range. If no such equivalent, value is
* the code point itself */
# ifndef DOINIT
- EXTCONST U8 PL_fold_latin1[];
+ EXTCONST U8 PL_fold_latin1[256];
# else
- EXTCONST U8 PL_fold_latin1[] = {
+ EXTCONST U8 PL_fold_latin1[256] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
@@ -293,9 +318,9 @@ SOFTWARE.
*/
# ifndef DOINIT
- EXTCONST U8 PL_extended_utf8_dfa_tab[];
+ EXTCONST U8 PL_extended_utf8_dfa_tab[416];
# else
- EXTCONST U8 PL_extended_utf8_dfa_tab[] = {
+ EXTCONST U8 PL_extended_utf8_dfa_tab[416] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*1_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -334,9 +359,9 @@ SOFTWARE.
*/
# ifndef DOINIT
- EXTCONST U16 PL_strict_utf8_dfa_tab[];
+ EXTCONST U16 PL_strict_utf8_dfa_tab[624];
# else
- EXTCONST U16 PL_strict_utf8_dfa_tab[] = {
+ EXTCONST U16 PL_strict_utf8_dfa_tab[624] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*1_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -381,9 +406,9 @@ SOFTWARE.
*/
# ifndef DOINIT
- EXTCONST U8 PL_c9_utf8_dfa_tab[];
+ EXTCONST U8 PL_c9_utf8_dfa_tab[368];
# else
- EXTCONST U8 PL_c9_utf8_dfa_tab[] = {
+ EXTCONST U8 PL_c9_utf8_dfa_tab[368] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*1_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -422,9 +447,9 @@ SOFTWARE.
/* Index is ASCII platform code point; value is EBCDIC 037 equivalent */
# ifndef DOINIT
- EXTCONST U8 PL_a2e[];
+ EXTCONST U8 PL_a2e[256];
# else
- EXTCONST U8 PL_a2e[] = {
+ EXTCONST U8 PL_a2e[256] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x37,0x2D,0x2E,0x2F,0x16,0x05,0x25,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x3C,0x3D,0x32,0x26,0x18,0x19,0x3F,0x27,0x1C,0x1D,0x1E,0x1F,
@@ -448,9 +473,9 @@ SOFTWARE.
/* Index is EBCDIC 037 code point; value is ASCII platform equivalent */
# ifndef DOINIT
- EXTCONST U8 PL_e2a[];
+ EXTCONST U8 PL_e2a[256];
# else
- EXTCONST U8 PL_e2a[] = {
+ EXTCONST U8 PL_e2a[256] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x9C,0x09,0x86,0x7F,0x97,0x8D,0x8E,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x9D,0x85,0x08,0x87,0x18,0x19,0x92,0x8F,0x1C,0x1D,0x1E,0x1F,
@@ -475,9 +500,9 @@ SOFTWARE.
/* (Confusingly named) Index is EBCDIC 037 I8 byte; value is
* EBCDIC 037 UTF-EBCDIC equivalent */
# ifndef DOINIT
- EXTCONST U8 PL_utf2e[];
+ EXTCONST U8 PL_utf2e[256];
# else
- EXTCONST U8 PL_utf2e[] = {
+ EXTCONST U8 PL_utf2e[256] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x37,0x2D,0x2E,0x2F,0x16,0x05,0x25,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x3C,0x3D,0x32,0x26,0x18,0x19,0x3F,0x27,0x1C,0x1D,0x1E,0x1F,
@@ -502,9 +527,9 @@ SOFTWARE.
/* (Confusingly named) Index is EBCDIC 037 UTF-EBCDIC byte; value is
* EBCDIC 037 I8 equivalent */
# ifndef DOINIT
- EXTCONST U8 PL_e2utf[];
+ EXTCONST U8 PL_e2utf[256];
# else
- EXTCONST U8 PL_e2utf[] = {
+ EXTCONST U8 PL_e2utf[256] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x9C,0x09,0x86,0x7F,0x97,0x8D,0x8E,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x9D,0x85,0x08,0x87,0x18,0x19,0x92,0x8F,0x1C,0x1D,0x1E,0x1F,
@@ -531,9 +556,9 @@ SOFTWARE.
* flags table in tr16. The entries marked 9 in tr16 are continuation bytes
* and are marked as length 1 here so that we can recover. */
# ifndef DOINIT
- EXTCONST U8 PL_utf8skip[];
+ EXTCONST U8 PL_utf8skip[256];
# else
- EXTCONST U8 PL_utf8skip[] = {
+ EXTCONST U8 PL_utf8skip[256] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
/*1_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -557,9 +582,9 @@ SOFTWARE.
/* Index is EBCDIC 037 code point; value is its lowercase equivalent */
# ifndef DOINIT
- EXTCONST U8 PL_latin1_lc[];
+ EXTCONST U8 PL_latin1_lc[256];
# else
- EXTCONST U8 PL_latin1_lc[] = {
+ EXTCONST U8 PL_latin1_lc[256] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
@@ -585,9 +610,9 @@ SOFTWARE.
* The 'mod' in the name means that codepoints whose uppercase is above 255 or
* longer than 1 character map to LATIN SMALL LETTER Y WITH DIARESIS */
# ifndef DOINIT
- EXTCONST U8 PL_mod_latin1_uc[];
+ EXTCONST U8 PL_mod_latin1_uc[256];
# else
- EXTCONST U8 PL_mod_latin1_uc[] = {
+ EXTCONST U8 PL_mod_latin1_uc[256] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
@@ -612,9 +637,34 @@ SOFTWARE.
/* Index is EBCDIC 037 code point; For A-Z, value is a-z; for a-z, value
* is A-Z; all other code points map to themselves */
# ifndef DOINIT
- EXTCONST U8 PL_fold[];
+ EXTCONST U8 PL_fold[256];
+# else
+ EXTCONST U8 PL_fold[256] = {
+/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
+/*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
+/*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
+/*2_*/0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
+/*3_*/0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
+/*4_*/0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
+/*5_*/0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
+/*6_*/0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
+/*7_*/0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
+/*8_*/0x80,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
+/*9_*/0x90,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
+/*A_*/0xA0,0xA1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
+/*B_*/0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
+/*C_*/0xC0,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
+/*D_*/0xD0,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
+/*E_*/0xE0,0xE1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
+/*F_*/0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF
+/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
+};
+# endif
+
+# ifndef DOINIT
+ EXT U8 PL_fold_locale[256];
# else
- EXTCONST U8 PL_fold[] = {
+ EXT U8 PL_fold_locale[256] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
@@ -640,9 +690,9 @@ SOFTWARE.
* (A => a; a => A, etc) in the 0-255 range. If no such equivalent, value is
* the code point itself */
# ifndef DOINIT
- EXTCONST U8 PL_fold_latin1[];
+ EXTCONST U8 PL_fold_latin1[256];
# else
- EXTCONST U8 PL_fold_latin1[] = {
+ EXTCONST U8 PL_fold_latin1[256] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
@@ -671,9 +721,9 @@ SOFTWARE.
*/
# ifndef DOINIT
- EXTCONST U8 PL_extended_utf8_dfa_tab[];
+ EXTCONST U8 PL_extended_utf8_dfa_tab[416];
# else
- EXTCONST U8 PL_extended_utf8_dfa_tab[] = {
+ EXTCONST U8 PL_extended_utf8_dfa_tab[416] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*1_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -712,9 +762,9 @@ SOFTWARE.
*/
# ifndef DOINIT
- EXTCONST U16 PL_strict_utf8_dfa_tab[];
+ EXTCONST U16 PL_strict_utf8_dfa_tab[624];
# else
- EXTCONST U16 PL_strict_utf8_dfa_tab[] = {
+ EXTCONST U16 PL_strict_utf8_dfa_tab[624] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*1_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -759,9 +809,9 @@ SOFTWARE.
*/
# ifndef DOINIT
- EXTCONST U8 PL_c9_utf8_dfa_tab[];
+ EXTCONST U8 PL_c9_utf8_dfa_tab[368];
# else
- EXTCONST U8 PL_c9_utf8_dfa_tab[] = {
+ EXTCONST U8 PL_c9_utf8_dfa_tab[368] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*1_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
diff --git a/Master/tlpkg/tlperl/lib/CORE/embed.h b/Master/tlpkg/tlperl/lib/CORE/embed.h
index 182b12aa937..10214db1fb0 100644
--- a/Master/tlpkg/tlperl/lib/CORE/embed.h
+++ b/Master/tlpkg/tlperl/lib/CORE/embed.h
@@ -20,7 +20,9 @@
/* By defining PERL_NO_SHORT_NAMES (not done by default) the short forms
* (like warn instead of Perl_warn) for the API are not defined.
- * Not defining the short forms is a good thing for cleaner embedding. */
+ * Not defining the short forms is a good thing for cleaner embedding.
+ * BEWARE that a bunch of macros don't have long names, so either must be
+ * added or don't use them if you define this symbol */
#ifndef PERL_NO_SHORT_NAMES
@@ -29,6 +31,10 @@
#define Gv_AMupdate(a,b) Perl_Gv_AMupdate(aTHX_ a,b)
#define SvAMAGIC_off Perl_SvAMAGIC_off
#define SvAMAGIC_on Perl_SvAMAGIC_on
+#define SvTRUE(a) Perl_SvTRUE(aTHX_ a)
+#define SvTRUE_NN(a) Perl_SvTRUE_NN(aTHX_ a)
+#define SvTRUE_common(a,b) Perl_SvTRUE_common(aTHX_ a,b)
+#define SvTRUE_nomg(a) Perl_SvTRUE_nomg(aTHX_ a)
#define _force_out_malformed_utf8_message(a,b,c,d) Perl__force_out_malformed_utf8_message(aTHX_ a,b,c,d)
#define _is_uni_FOO(a,b) Perl__is_uni_FOO(aTHX_ a,b)
#define _is_uni_perl_idcont(a) Perl__is_uni_perl_idcont(aTHX_ a)
@@ -48,6 +54,7 @@
#define atfork_lock Perl_atfork_lock
#define atfork_unlock Perl_atfork_unlock
#define av_clear(a) Perl_av_clear(aTHX_ a)
+#define av_count(a) Perl_av_count(aTHX_ a)
#define av_delete(a,b,c) Perl_av_delete(aTHX_ a,b,c)
#define av_exists(a,b) Perl_av_exists(aTHX_ a,b)
#define av_extend(a,b) Perl_av_extend(aTHX_ a,b)
@@ -59,7 +66,6 @@
#define av_push(a,b) Perl_av_push(aTHX_ a,b)
#define av_shift(a) Perl_av_shift(aTHX_ a)
#define av_store(a,b,c) Perl_av_store(aTHX_ a,b,c)
-#define av_top_index(a) Perl_av_top_index(aTHX_ a)
#define av_undef(a) Perl_av_undef(aTHX_ a)
#define av_unshift(a,b) Perl_av_unshift(aTHX_ a,b)
#define block_end(a,b) Perl_block_end(aTHX_ a,b)
@@ -386,6 +392,7 @@
#define newSVrv(a,b) Perl_newSVrv(aTHX_ a,b)
#define newSVsv_flags(a,b) Perl_newSVsv_flags(aTHX_ a,b)
#define newSVuv(a) Perl_newSVuv(aTHX_ a)
+#define newTRYCATCHOP(a,b,c,d) Perl_newTRYCATCHOP(aTHX_ a,b,c,d)
#define newUNOP(a,b,c) Perl_newUNOP(aTHX_ a,b,c)
#define newUNOP_AUX(a,b,c,d) Perl_newUNOP_AUX(aTHX_ a,b,c,d)
#define newWHENOP(a,b) Perl_newWHENOP(aTHX_ a,b)
@@ -410,12 +417,18 @@
#define op_refcnt_unlock() Perl_op_refcnt_unlock(aTHX)
#define op_scope(a) Perl_op_scope(aTHX_ a)
#define op_sibling_splice Perl_op_sibling_splice
+#ifndef NO_MATHOMS
+#define pack_cat(a,b,c,d,e,f,g) Perl_pack_cat(aTHX_ a,b,c,d,e,f,g)
+#endif
#define packlist(a,b,c,d,e) Perl_packlist(aTHX_ a,b,c,d,e)
#define pad_add_anon(a,b) Perl_pad_add_anon(aTHX_ a,b)
#define pad_add_name_pv(a,b,c,d) Perl_pad_add_name_pv(aTHX_ a,b,c,d)
#define pad_add_name_pvn(a,b,c,d,e) Perl_pad_add_name_pvn(aTHX_ a,b,c,d,e)
#define pad_add_name_sv(a,b,c,d) Perl_pad_add_name_sv(aTHX_ a,b,c,d)
#define pad_alloc(a,b) Perl_pad_alloc(aTHX_ a,b)
+#ifndef NO_MATHOMS
+#define pad_compname_type(a) Perl_pad_compname_type(aTHX_ a)
+#endif
#define pad_findmy_pv(a,b) Perl_pad_findmy_pv(aTHX_ a,b)
#define pad_findmy_pvn(a,b,c) Perl_pad_findmy_pvn(aTHX_ a,b,c)
#define pad_findmy_sv(a,b) Perl_pad_findmy_sv(aTHX_ a,b)
@@ -809,6 +822,7 @@
#define cx_pushloop_for(a,b,c) Perl_cx_pushloop_for(aTHX_ a,b,c)
#define cx_pushloop_plain(a) Perl_cx_pushloop_plain(aTHX_ a)
#define cx_pushsub(a,b,c,d) Perl_cx_pushsub(aTHX_ a,b,c,d)
+#define cx_pushtry(a,b) Perl_cx_pushtry(aTHX_ a,b)
#define cx_pushwhen(a) Perl_cx_pushwhen(aTHX_ a)
#define cx_topblock(a) Perl_cx_topblock(aTHX_ a)
#define gimme_V() Perl_gimme_V(aTHX)
@@ -828,11 +842,6 @@
#define dump_mstats(a) Perl_dump_mstats(aTHX_ a)
#define get_mstats(a,b,c) Perl_get_mstats(aTHX_ a,b,c)
#endif
-#if defined(PERL_GLOBAL_STRUCT)
-#define GetVars() Perl_GetVars(aTHX)
-#define free_global_struct(a) Perl_free_global_struct(aTHX_ a)
-#define init_global_struct() Perl_init_global_struct(aTHX)
-#endif
#if defined(PERL_IMPLICIT_CONTEXT)
#define croak_nocontext Perl_croak_nocontext
#define deb_nocontext Perl_deb_nocontext
@@ -914,7 +923,7 @@
#define PerlIO_unread(a,b,c) Perl_PerlIO_unread(aTHX_ a,b,c)
#define PerlIO_write(a,b,c) Perl_PerlIO_write(aTHX_ a,b,c)
#endif
-#if defined(WIN32) || defined(__SYMBIAN32__) || defined(VMS)
+#if defined(WIN32) || defined(VMS)
#define do_aspawn(a,b,c) Perl_do_aspawn(aTHX_ a,b,c)
#define do_spawn(a) Perl_do_spawn(aTHX_ a)
#define do_spawn_nowait(a) Perl_do_spawn_nowait(aTHX_ a)
@@ -927,6 +936,7 @@
#define cntrl_to_mnemonic Perl_cntrl_to_mnemonic
#define current_re_engine() Perl_current_re_engine(aTHX)
#define cv_ckproto_len_flags(a,b,c,d,e) Perl_cv_ckproto_len_flags(aTHX_ a,b,c,d,e)
+#define delimcpy_no_escape Perl_delimcpy_no_escape
#define do_uniprop_match Perl_do_uniprop_match
#define get_and_check_backslash_N_name(a,b,c,d) Perl_get_and_check_backslash_N_name(aTHX_ a,b,c,d)
#define get_deprecated_property_msg Perl_get_deprecated_property_msg
@@ -1039,6 +1049,7 @@
#define find_first_differing_byte_pos S_find_first_differing_byte_pos
#define get_ANYOFM_contents(a) S_get_ANYOFM_contents(aTHX_ a)
#define get_ANYOF_cp_list_for_ssc(a,b) S_get_ANYOF_cp_list_for_ssc(aTHX_ a,b)
+#define get_quantifier_value(a,b,c) S_get_quantifier_value(aTHX_ a,b,c)
#define grok_bslash_N(a,b,c,d,e,f,g) S_grok_bslash_N(aTHX_ a,b,c,d,e,f,g)
#define handle_named_backref(a,b,c,d) S_handle_named_backref(aTHX_ a,b,c,d)
#define handle_names_wildcard(a,b,c,d) S_handle_names_wildcard(aTHX_ a,b,c,d)
@@ -1052,7 +1063,6 @@
#define join_exact(a,b,c,d,e,f,g) S_join_exact(aTHX_ a,b,c,d,e,f,g)
#define make_exactf_invlist(a,b) S_make_exactf_invlist(aTHX_ a,b)
#define make_trie(a,b,c,d,e,f,g,h) S_make_trie(aTHX_ a,b,c,d,e,f,g,h)
-#define new_regcurly S_new_regcurly
#define nextchar(a) S_nextchar(aTHX_ a)
#define output_posix_warnings(a,b) S_output_posix_warnings(aTHX_ a,b)
#define parse_lparen_question_flags(a) S_parse_lparen_question_flags(aTHX_ a)
@@ -1155,7 +1165,7 @@
#define invlist_clone(a,b) Perl_invlist_clone(aTHX_ a,b)
# endif
# if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C)
-#define regcurly S_regcurly
+#define regcurly Perl_regcurly
# endif
# if defined(PERL_IN_REGEXEC_C)
#define advance_one_LB(a,b,c) S_advance_one_LB(aTHX_ a,b,c)
@@ -1170,6 +1180,7 @@
#define find_span_end S_find_span_end
#define find_span_end_mask S_find_span_end_mask
#define foldEQ_latin1_s2_folded S_foldEQ_latin1_s2_folded
+#define isFOO_lc(a,b) S_isFOO_lc(aTHX_ a,b)
#define isFOO_utf8_lc(a,b,c) S_isFOO_utf8_lc(aTHX_ a,b,c)
#define isGCB(a,b,c,d,e) S_isGCB(aTHX_ a,b,c,d,e)
#define isLB(a,b,c,d,e,f) S_isLB(aTHX_ a,b,c,d,e,f)
@@ -1189,9 +1200,6 @@
#define to_byte_substr(a) S_to_byte_substr(aTHX_ a)
#define to_utf8_substr(a) S_to_utf8_substr(aTHX_ a)
# endif
-# if defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_UTF8_C)
-#define isFOO_lc(a,b) Perl_isFOO_lc(aTHX_ a,b)
-# endif
#endif
#ifdef PERL_CORE
#define PerlLIO_dup2_cloexec(a,b) Perl_PerlLIO_dup2_cloexec(aTHX_ a,b)
@@ -1262,6 +1270,7 @@
#define ck_svconst(a) Perl_ck_svconst(aTHX_ a)
#define ck_tell(a) Perl_ck_tell(aTHX_ a)
#define ck_trunc(a) Perl_ck_trunc(aTHX_ a)
+#define ck_trycatch(a) Perl_ck_trycatch(aTHX_ a)
#define closest_cop(a,b,c,d) Perl_closest_cop(aTHX_ a,b,c,d)
#define cmpchain_extend(a,b,c) Perl_cmpchain_extend(aTHX_ a,b,c)
#define cmpchain_finish(a) Perl_cmpchain_finish(aTHX_ a)
@@ -1282,7 +1291,6 @@
#define deb_stack_all() Perl_deb_stack_all(aTHX)
#define defelem_target(a,b) Perl_defelem_target(aTHX_ a,b)
#define delete_eval_scope() Perl_delete_eval_scope(aTHX)
-#define delimcpy_no_escape Perl_delimcpy_no_escape
#define die_unwind(a) Perl_die_unwind(aTHX_ a)
#define do_aexec5(a,b,c,d,e) Perl_do_aexec5(aTHX_ a,b,c,d,e)
#define do_dump_pad(a,b,c,d) Perl_do_dump_pad(aTHX_ a,b,c,d)
@@ -1341,7 +1349,9 @@
#define magic_copycallchecker(a,b,c,d,e) Perl_magic_copycallchecker(aTHX_ a,b,c,d,e)
#define magic_existspack(a,b) Perl_magic_existspack(aTHX_ a,b)
#define magic_freearylen_p(a,b) Perl_magic_freearylen_p(aTHX_ a,b)
+#define magic_freemglob(a,b) Perl_magic_freemglob(aTHX_ a,b)
#define magic_freeovrld(a,b) Perl_magic_freeovrld(aTHX_ a,b)
+#define magic_freeutf8(a,b) Perl_magic_freeutf8(aTHX_ a,b)
#define magic_get(a,b) Perl_magic_get(aTHX_ a,b)
#define magic_getarylen(a,b) Perl_magic_getarylen(aTHX_ a,b)
#define magic_getdebugvar(a,b) Perl_magic_getdebugvar(aTHX_ a,b)
@@ -1399,6 +1409,7 @@
#define newXS_deffile(a,b) Perl_newXS_deffile(aTHX_ a,b)
#define newXS_len_flags(a,b,c,d,e,f,g) Perl_newXS_len_flags(aTHX_ a,b,c,d,e,f,g)
#define nextargv(a,b) Perl_nextargv(aTHX_ a,b)
+#define no_bareword_filehandle(a) Perl_no_bareword_filehandle(aTHX_ a)
#define noperl_die Perl_noperl_die
#define notify_parser_that_changed_to_utf8() Perl_notify_parser_that_changed_to_utf8(aTHX)
#define oopsAV(a) Perl_oopsAV(aTHX_ a)
@@ -2008,6 +2019,7 @@
#define padnamelist_dup(a,b) Perl_padnamelist_dup(aTHX_ a,b)
# endif
# if defined(USE_LOCALE_COLLATE)
+#define magic_freecollxfrm(a,b) Perl_magic_freecollxfrm(aTHX_ a,b)
#define magic_setcollxfrm(a,b) Perl_magic_setcollxfrm(aTHX_ a,b)
#ifndef NO_MATHOMS
#define mem_collxfrm(a,b,c) Perl_mem_collxfrm(aTHX_ a,b,c)
diff --git a/Master/tlpkg/tlperl/lib/CORE/embedvar.h b/Master/tlpkg/tlperl/lib/CORE/embedvar.h
index de1aa999a81..67ccd6b7230 100644
--- a/Master/tlpkg/tlperl/lib/CORE/embedvar.h
+++ b/Master/tlpkg/tlperl/lib/CORE/embedvar.h
@@ -107,7 +107,6 @@
#define PL_comppad_name_floor (vTHX->Icomppad_name_floor)
#define PL_constpadix (vTHX->Iconstpadix)
#define PL_cop_seqmax (vTHX->Icop_seqmax)
-#define PL_cryptseen (vTHX->Icryptseen)
#define PL_curcop (vTHX->Icurcop)
#define PL_curcopdb (vTHX->Icurcopdb)
#define PL_curlocales (vTHX->Icurlocales)
@@ -205,6 +204,7 @@
#define PL_maxsysfd (vTHX->Imaxsysfd)
#define PL_mbrlen_ps (vTHX->Imbrlen_ps)
#define PL_mbrtowc_ps (vTHX->Imbrtowc_ps)
+#define PL_mem_log (vTHX->Imem_log)
#define PL_memory_debug_header (vTHX->Imemory_debug_header)
#define PL_mess_sv (vTHX->Imess_sv)
#define PL_min_intro_pending (vTHX->Imin_intro_pending)
@@ -376,133 +376,4 @@
#endif /* MULTIPLICITY */
-#if defined(PERL_GLOBAL_STRUCT)
-
-#define PL_C_locale_obj (my_vars->GC_locale_obj)
-#define PL_GC_locale_obj (my_vars->GC_locale_obj)
-#define PL_appctx (my_vars->Gappctx)
-#define PL_Gappctx (my_vars->Gappctx)
-#define PL_check (my_vars->Gcheck)
-#define PL_Gcheck (my_vars->Gcheck)
-#define PL_check_mutex (my_vars->Gcheck_mutex)
-#define PL_Gcheck_mutex (my_vars->Gcheck_mutex)
-#define PL_csighandler1p (my_vars->Gcsighandler1p)
-#define PL_Gcsighandler1p (my_vars->Gcsighandler1p)
-#define PL_csighandler3p (my_vars->Gcsighandler3p)
-#define PL_Gcsighandler3p (my_vars->Gcsighandler3p)
-#define PL_csighandlerp (my_vars->Gcsighandlerp)
-#define PL_Gcsighandlerp (my_vars->Gcsighandlerp)
-#define PL_curinterp (my_vars->Gcurinterp)
-#define PL_Gcurinterp (my_vars->Gcurinterp)
-#define PL_do_undump (my_vars->Gdo_undump)
-#define PL_Gdo_undump (my_vars->Gdo_undump)
-#define PL_dollarzero_mutex (my_vars->Gdollarzero_mutex)
-#define PL_Gdollarzero_mutex (my_vars->Gdollarzero_mutex)
-#define PL_env_mutex (my_vars->Genv_mutex)
-#define PL_Genv_mutex (my_vars->Genv_mutex)
-#define PL_fold_locale (my_vars->Gfold_locale)
-#define PL_Gfold_locale (my_vars->Gfold_locale)
-#define PL_hash_chars (my_vars->Ghash_chars)
-#define PL_Ghash_chars (my_vars->Ghash_chars)
-#define PL_hash_seed (my_vars->Ghash_seed)
-#define PL_Ghash_seed (my_vars->Ghash_seed)
-#define PL_hash_seed_set (my_vars->Ghash_seed_set)
-#define PL_Ghash_seed_set (my_vars->Ghash_seed_set)
-#define PL_hash_state (my_vars->Ghash_state)
-#define PL_Ghash_state (my_vars->Ghash_state)
-#define PL_hints_mutex (my_vars->Ghints_mutex)
-#define PL_Ghints_mutex (my_vars->Ghints_mutex)
-#define PL_keyword_plugin (my_vars->Gkeyword_plugin)
-#define PL_Gkeyword_plugin (my_vars->Gkeyword_plugin)
-#define PL_keyword_plugin_mutex (my_vars->Gkeyword_plugin_mutex)
-#define PL_Gkeyword_plugin_mutex (my_vars->Gkeyword_plugin_mutex)
-#define PL_lc_numeric_mutex (my_vars->Glc_numeric_mutex)
-#define PL_Glc_numeric_mutex (my_vars->Glc_numeric_mutex)
-#define PL_locale_mutex (my_vars->Glocale_mutex)
-#define PL_Glocale_mutex (my_vars->Glocale_mutex)
-#define PL_malloc_mutex (my_vars->Gmalloc_mutex)
-#define PL_Gmalloc_mutex (my_vars->Gmalloc_mutex)
-#define PL_mmap_page_size (my_vars->Gmmap_page_size)
-#define PL_Gmmap_page_size (my_vars->Gmmap_page_size)
-#define PL_my_ctx_mutex (my_vars->Gmy_ctx_mutex)
-#define PL_Gmy_ctx_mutex (my_vars->Gmy_ctx_mutex)
-#define PL_my_cxt_index (my_vars->Gmy_cxt_index)
-#define PL_Gmy_cxt_index (my_vars->Gmy_cxt_index)
-#define PL_my_cxt_keys (my_vars->Gmy_cxt_keys)
-#define PL_Gmy_cxt_keys (my_vars->Gmy_cxt_keys)
-#define PL_my_cxt_keys_size (my_vars->Gmy_cxt_keys_size)
-#define PL_Gmy_cxt_keys_size (my_vars->Gmy_cxt_keys_size)
-#define PL_op_mutex (my_vars->Gop_mutex)
-#define PL_Gop_mutex (my_vars->Gop_mutex)
-#define PL_op_seq (my_vars->Gop_seq)
-#define PL_Gop_seq (my_vars->Gop_seq)
-#define PL_op_sequence (my_vars->Gop_sequence)
-#define PL_Gop_sequence (my_vars->Gop_sequence)
-#define PL_perlio_debug_fd (my_vars->Gperlio_debug_fd)
-#define PL_Gperlio_debug_fd (my_vars->Gperlio_debug_fd)
-#define PL_perlio_fd_refcnt (my_vars->Gperlio_fd_refcnt)
-#define PL_Gperlio_fd_refcnt (my_vars->Gperlio_fd_refcnt)
-#define PL_perlio_fd_refcnt_size (my_vars->Gperlio_fd_refcnt_size)
-#define PL_Gperlio_fd_refcnt_size (my_vars->Gperlio_fd_refcnt_size)
-#define PL_perlio_mutex (my_vars->Gperlio_mutex)
-#define PL_Gperlio_mutex (my_vars->Gperlio_mutex)
-#ifdef __VMS
-#define PL_perllib_sep (my_vars->Gperllib_sep)
-#define PL_Gperllib_sep (my_vars->Gperllib_sep)
-#endif
-#define PL_ppaddr (my_vars->Gppaddr)
-#define PL_Gppaddr (my_vars->Gppaddr)
-#ifdef OS2
-#define PL_sh_path (my_vars->Gsh_path)
-#define PL_Gsh_path (my_vars->Gsh_path)
-#endif
-#define PL_sig_defaulting (my_vars->Gsig_defaulting)
-#define PL_Gsig_defaulting (my_vars->Gsig_defaulting)
-#define PL_sig_handlers_initted (my_vars->Gsig_handlers_initted)
-#define PL_Gsig_handlers_initted (my_vars->Gsig_handlers_initted)
-#define PL_sig_ignoring (my_vars->Gsig_ignoring)
-#define PL_Gsig_ignoring (my_vars->Gsig_ignoring)
-#define PL_sig_trapped (my_vars->Gsig_trapped)
-#define PL_Gsig_trapped (my_vars->Gsig_trapped)
-#define PL_sigfpe_saved (my_vars->Gsigfpe_saved)
-#define PL_Gsigfpe_saved (my_vars->Gsigfpe_saved)
-#define PL_strategy_accept (my_vars->Gstrategy_accept)
-#define PL_Gstrategy_accept (my_vars->Gstrategy_accept)
-#define PL_strategy_dup (my_vars->Gstrategy_dup)
-#define PL_Gstrategy_dup (my_vars->Gstrategy_dup)
-#define PL_strategy_dup2 (my_vars->Gstrategy_dup2)
-#define PL_Gstrategy_dup2 (my_vars->Gstrategy_dup2)
-#define PL_strategy_mkstemp (my_vars->Gstrategy_mkstemp)
-#define PL_Gstrategy_mkstemp (my_vars->Gstrategy_mkstemp)
-#define PL_strategy_open (my_vars->Gstrategy_open)
-#define PL_Gstrategy_open (my_vars->Gstrategy_open)
-#define PL_strategy_open3 (my_vars->Gstrategy_open3)
-#define PL_Gstrategy_open3 (my_vars->Gstrategy_open3)
-#define PL_strategy_pipe (my_vars->Gstrategy_pipe)
-#define PL_Gstrategy_pipe (my_vars->Gstrategy_pipe)
-#define PL_strategy_socket (my_vars->Gstrategy_socket)
-#define PL_Gstrategy_socket (my_vars->Gstrategy_socket)
-#define PL_strategy_socketpair (my_vars->Gstrategy_socketpair)
-#define PL_Gstrategy_socketpair (my_vars->Gstrategy_socketpair)
-#define PL_sv_placeholder (my_vars->Gsv_placeholder)
-#define PL_Gsv_placeholder (my_vars->Gsv_placeholder)
-#define PL_thr_key (my_vars->Gthr_key)
-#define PL_Gthr_key (my_vars->Gthr_key)
-#define PL_timesbase (my_vars->Gtimesbase)
-#define PL_Gtimesbase (my_vars->Gtimesbase)
-#define PL_use_safe_putenv (my_vars->Guse_safe_putenv)
-#define PL_Guse_safe_putenv (my_vars->Guse_safe_putenv)
-#define PL_user_def_props (my_vars->Guser_def_props)
-#define PL_Guser_def_props (my_vars->Guser_def_props)
-#define PL_user_def_props_aTHX (my_vars->Guser_def_props_aTHX)
-#define PL_Guser_def_props_aTHX (my_vars->Guser_def_props_aTHX)
-#define PL_user_prop_mutex (my_vars->Guser_prop_mutex)
-#define PL_Guser_prop_mutex (my_vars->Guser_prop_mutex)
-#define PL_veto_cleanup (my_vars->Gveto_cleanup)
-#define PL_Gveto_cleanup (my_vars->Gveto_cleanup)
-#define PL_watch_pvx (my_vars->Gwatch_pvx)
-#define PL_Gwatch_pvx (my_vars->Gwatch_pvx)
-
-#endif /* PERL_GLOBAL_STRUCT */
-
/* ex: set ro: */
diff --git a/Master/tlpkg/tlperl/lib/CORE/feature.h b/Master/tlpkg/tlperl/lib/CORE/feature.h
index 2f2f23c4da7..501bc3a3b18 100644
--- a/Master/tlpkg/tlperl/lib/CORE/feature.h
+++ b/Master/tlpkg/tlperl/lib/CORE/feature.h
@@ -12,21 +12,24 @@
#define HINT_FEATURE_SHIFT 26
-#define FEATURE_BITWISE_BIT 0x0001
-#define FEATURE___SUB___BIT 0x0002
-#define FEATURE_MYREF_BIT 0x0004
-#define FEATURE_EVALBYTES_BIT 0x0008
-#define FEATURE_FC_BIT 0x0010
-#define FEATURE_INDIRECT_BIT 0x0020
-#define FEATURE_ISA_BIT 0x0040
-#define FEATURE_POSTDEREF_QQ_BIT 0x0080
-#define FEATURE_REFALIASING_BIT 0x0100
-#define FEATURE_SAY_BIT 0x0200
-#define FEATURE_SIGNATURES_BIT 0x0400
-#define FEATURE_STATE_BIT 0x0800
-#define FEATURE_SWITCH_BIT 0x1000
-#define FEATURE_UNIEVAL_BIT 0x2000
-#define FEATURE_UNICODE_BIT 0x4000
+#define FEATURE_BAREWORD_FILEHANDLES_BIT 0x0001
+#define FEATURE_BITWISE_BIT 0x0002
+#define FEATURE___SUB___BIT 0x0004
+#define FEATURE_MYREF_BIT 0x0008
+#define FEATURE_EVALBYTES_BIT 0x0010
+#define FEATURE_FC_BIT 0x0020
+#define FEATURE_INDIRECT_BIT 0x0040
+#define FEATURE_ISA_BIT 0x0080
+#define FEATURE_MULTIDIMENSIONAL_BIT 0x0100
+#define FEATURE_POSTDEREF_QQ_BIT 0x0200
+#define FEATURE_REFALIASING_BIT 0x0400
+#define FEATURE_SAY_BIT 0x0800
+#define FEATURE_SIGNATURES_BIT 0x1000
+#define FEATURE_STATE_BIT 0x2000
+#define FEATURE_SWITCH_BIT 0x4000
+#define FEATURE_TRY_BIT 0x8000
+#define FEATURE_UNIEVAL_BIT 0x10000
+#define FEATURE_UNICODE_BIT 0x20000
#define FEATURE_BUNDLE_DEFAULT 0
#define FEATURE_BUNDLE_510 1
@@ -46,7 +49,7 @@
? (PL_curcop->cop_features & (mask)) : FALSE)
/* The longest string we pass in. */
-#define MAX_FEATURE_LEN (sizeof("postderef_qq")-1)
+#define MAX_FEATURE_LEN (sizeof("bareword_filehandles")-1)
#define FEATURE_FC_IS_ENABLED \
( \
@@ -70,6 +73,12 @@
FEATURE_IS_ENABLED_MASK(FEATURE_SAY_BIT)) \
)
+#define FEATURE_TRY_IS_ENABLED \
+ ( \
+ CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
+ FEATURE_IS_ENABLED_MASK(FEATURE_TRY_BIT) \
+ )
+
#define FEATURE_STATE_IS_ENABLED \
( \
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_510 && \
@@ -158,6 +167,20 @@
FEATURE_IS_ENABLED_MASK(FEATURE_UNICODE_BIT)) \
)
+#define FEATURE_MULTIDIMENSIONAL_IS_ENABLED \
+ ( \
+ CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527 \
+ || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
+ FEATURE_IS_ENABLED_MASK(FEATURE_MULTIDIMENSIONAL_BIT)) \
+ )
+
+#define FEATURE_BAREWORD_FILEHANDLES_IS_ENABLED \
+ ( \
+ CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527 \
+ || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
+ FEATURE_IS_ENABLED_MASK(FEATURE_BAREWORD_FILEHANDLES_BIT)) \
+ )
+
#define SAVEFEATUREBITS() SAVEI32(PL_compiling.cop_features)
@@ -228,7 +251,12 @@ S_magic_sethint_feature(pTHX_ SV *keysv, const char *keypv, STRLEN keylen,
return;
case 'b':
- if (keylen == sizeof("feature_bitwise")-1
+ if (keylen == sizeof("feature_bareword_filehandles")-1
+ && memcmp(subf+1, "areword_filehandles", keylen - sizeof("feature_")) == 0) {
+ mask = FEATURE_BAREWORD_FILEHANDLES_BIT;
+ break;
+ }
+ else if (keylen == sizeof("feature_bitwise")-1
&& memcmp(subf+1, "itwise", keylen - sizeof("feature_")) == 0) {
mask = FEATURE_BITWISE_BIT;
break;
@@ -265,7 +293,12 @@ S_magic_sethint_feature(pTHX_ SV *keysv, const char *keypv, STRLEN keylen,
return;
case 'm':
- if (keylen == sizeof("feature_myref")-1
+ if (keylen == sizeof("feature_multidimensional")-1
+ && memcmp(subf+1, "ultidimensional", keylen - sizeof("feature_")) == 0) {
+ mask = FEATURE_MULTIDIMENSIONAL_BIT;
+ break;
+ }
+ else if (keylen == sizeof("feature_myref")-1
&& memcmp(subf+1, "yref", keylen - sizeof("feature_")) == 0) {
mask = FEATURE_MYREF_BIT;
break;
@@ -311,6 +344,14 @@ S_magic_sethint_feature(pTHX_ SV *keysv, const char *keypv, STRLEN keylen,
}
return;
+ case 't':
+ if (keylen == sizeof("feature_try")-1
+ && memcmp(subf+1, "ry", keylen - sizeof("feature_")) == 0) {
+ mask = FEATURE_TRY_BIT;
+ break;
+ }
+ return;
+
case 'u':
if (keylen == sizeof("feature_unicode")-1
&& memcmp(subf+1, "nicode", keylen - sizeof("feature_")) == 0) {
diff --git a/Master/tlpkg/tlperl/lib/CORE/gv.h b/Master/tlpkg/tlperl/lib/CORE/gv.h
index 488f2cc87fe..9b465a069d4 100644
--- a/Master/tlpkg/tlperl/lib/CORE/gv.h
+++ b/Master/tlpkg/tlperl/lib/CORE/gv.h
@@ -26,34 +26,34 @@ struct gp {
#define GvXPVGV(gv) ((XPVGV*)SvANY(gv))
-#if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__INTEL_COMPILER)
+#if defined (DEBUGGING) && defined(PERL_USE_GCC_BRACE_GROUPS) && !defined(__INTEL_COMPILER)
# define GvGP(gv) \
- (0+(*({GV *const _gvgp = (GV *) (gv); \
- assert(SvTYPE(_gvgp) == SVt_PVGV || SvTYPE(_gvgp) == SVt_PVLV); \
- assert(isGV_with_GP(_gvgp)); \
- &((_gvgp)->sv_u.svu_gp);})))
+ (0+(*({GV *const _gvgp = (GV *) (gv); \
+ assert(SvTYPE(_gvgp) == SVt_PVGV || SvTYPE(_gvgp) == SVt_PVLV); \
+ assert(isGV_with_GP(_gvgp)); \
+ &((_gvgp)->sv_u.svu_gp);})))
# define GvGP_set(gv,gp) \
- {GV *const _gvgp = (GV *) (gv); \
- assert(SvTYPE(_gvgp) == SVt_PVGV || SvTYPE(_gvgp) == SVt_PVLV); \
- assert(isGV_with_GP(_gvgp)); \
- (_gvgp)->sv_u.svu_gp = (gp); }
+ {GV *const _gvgp = (GV *) (gv); \
+ assert(SvTYPE(_gvgp) == SVt_PVGV || SvTYPE(_gvgp) == SVt_PVLV); \
+ assert(isGV_with_GP(_gvgp)); \
+ (_gvgp)->sv_u.svu_gp = (gp); }
# define GvFLAGS(gv) \
- (*({GV *const _gvflags = (GV *) (gv); \
- assert(SvTYPE(_gvflags) == SVt_PVGV || SvTYPE(_gvflags) == SVt_PVLV); \
- assert(isGV_with_GP(_gvflags)); \
- &(GvXPVGV(_gvflags)->xpv_cur);}))
+ (*({GV *const _gvflags = (GV *) (gv); \
+ assert(SvTYPE(_gvflags) == SVt_PVGV || SvTYPE(_gvflags) == SVt_PVLV); \
+ assert(isGV_with_GP(_gvflags)); \
+ &(GvXPVGV(_gvflags)->xpv_cur);}))
# define GvSTASH(gv) \
- (*({ GV * const _gvstash = (GV *) (gv); \
- assert(isGV_with_GP(_gvstash)); \
- assert(SvTYPE(_gvstash) == SVt_PVGV || SvTYPE(_gvstash) >= SVt_PVLV); \
- &(GvXPVGV(_gvstash)->xnv_u.xgv_stash); \
- }))
+ (*({ GV * const _gvstash = (GV *) (gv); \
+ assert(isGV_with_GP(_gvstash)); \
+ assert(SvTYPE(_gvstash) == SVt_PVGV || SvTYPE(_gvstash) >= SVt_PVLV); \
+ &(GvXPVGV(_gvstash)->xnv_u.xgv_stash); \
+ }))
# define GvNAME_HEK(gv) \
(*({ GV * const _gvname_hek = (GV *) (gv); \
- assert(isGV_with_GP(_gvname_hek)); \
- assert(SvTYPE(_gvname_hek) == SVt_PVGV || SvTYPE(_gvname_hek) >= SVt_PVLV); \
- &(GvXPVGV(_gvname_hek)->xiv_u.xivu_namehek); \
- }))
+ assert(isGV_with_GP(_gvname_hek)); \
+ assert(SvTYPE(_gvname_hek) == SVt_PVGV || SvTYPE(_gvname_hek) >= SVt_PVLV); \
+ &(GvXPVGV(_gvname_hek)->xiv_u.xivu_namehek); \
+ }))
# define GvNAME_get(gv) ({ assert(GvNAME_HEK(gv)); (char *)HEK_KEY(GvNAME_HEK(gv)); })
# define GvNAMELEN_get(gv) ({ assert(GvNAME_HEK(gv)); HEK_LEN(GvNAME_HEK(gv)); })
# define GvNAMEUTF8(gv) ({ assert(GvNAME_HEK(gv)); HEK_UTF8(GvNAME_HEK(gv)); })
@@ -72,12 +72,17 @@ struct gp {
#define GvNAMELEN(gv) GvNAMELEN_get(gv)
/*
-=head1 GV Functions
-
=for apidoc Am|SV*|GvSV|GV* gv
Return the SV from the GV.
+Prior to Perl v5.9.3, this would add a scalar if none existed. Nowadays, use
+C<L</GvSVn>> for that, or compile perl with S<C<-DPERL_CREATE_GVSV>>. See
+L<perl5100delta>.
+
+=for apidoc Am|SV*|GvSVn|GV* gv
+Like C<L</GvSV>>, but creates an empty scalar if none already exists.
+
=for apidoc Am|AV*|GvAV|GV* gv
Return the AV from the GV.
@@ -96,8 +101,8 @@ Return the CV from the GV.
#define GvSV(gv) (GvGP(gv)->gp_sv)
#ifdef PERL_DONT_CREATE_GVSV
#define GvSVn(gv) (*(GvGP(gv)->gp_sv ? \
- &(GvGP(gv)->gp_sv) : \
- &(GvGP(gv_SVadd(gv))->gp_sv)))
+ &(GvGP(gv)->gp_sv) : \
+ &(GvGP(gv_SVadd(gv))->gp_sv)))
#else
#define GvSVn(gv) GvSV(gv)
#endif
@@ -121,13 +126,13 @@ Return the CV from the GV.
#define GvAV(gv) (GvGP(gv)->gp_av)
#define GvAVn(gv) (GvGP(gv)->gp_av ? \
- GvGP(gv)->gp_av : \
- GvGP(gv_AVadd(gv))->gp_av)
+ GvGP(gv)->gp_av : \
+ GvGP(gv_AVadd(gv))->gp_av)
#define GvHV(gv) ((GvGP(gv))->gp_hv)
#define GvHVn(gv) (GvGP(gv)->gp_hv ? \
- GvGP(gv)->gp_hv : \
- GvGP(gv_HVadd(gv))->gp_hv)
+ GvGP(gv)->gp_hv : \
+ GvGP(gv_HVadd(gv))->gp_hv)
#define GvCV(gv) (0+GvGP(gv)->gp_cv)
#define GvCV_set(gv,cv) (GvGP(gv)->gp_cv = (cv))
@@ -216,37 +221,38 @@ Return the CV from the GV.
* symbol creation flags, for use in gv_fetchpv() and get_*v()
*/
#define GV_ADD 0x01 /* add, if symbol not already there
- For gv_name_set, adding a HEK for the first
- time, so don't try to free what's there. */
+ For gv_name_set, adding a HEK for the first
+ time, so don't try to free what's there. */
#define GV_ADDMULTI 0x02 /* add, pretending it has been added
- already; used also by gv_init_* */
+ already; used also by gv_init_* */
#define GV_ADDWARN 0x04 /* add, but warn if symbol wasn't already there */
- /* 0x08 UNUSED */
+ /* 0x08 UNUSED */
#define GV_NOINIT 0x10 /* add, but don't init symbol, if type != PVGV */
/* This is used by toke.c to avoid turing placeholder constants in the symbol
table into full PVGVs with attached constant subroutines. */
#define GV_NOADD_NOINIT 0x20 /* Don't add the symbol if it's not there.
- Don't init it if it is there but ! PVGV */
+ Don't init it if it is there but ! PVGV */
#define GV_NOEXPAND 0x40 /* Don't expand SvOK() entries to PVGV */
#define GV_NOTQUAL 0x80 /* A plain symbol name, not qualified with a
- package (so skip checks for :: and ') */
+ package (so skip checks for :: and ') */
#define GV_AUTOLOAD 0x100 /* gv_fetchmethod_flags() should AUTOLOAD */
#define GV_CROAK 0x200 /* gv_fetchmethod_flags() should croak */
#define GV_ADDMG 0x400 /* add if magical */
#define GV_NO_SVGMAGIC 0x800 /* Skip get-magic on an SV argument;
- used only by gv_fetchsv(_nomg) */
+ used only by gv_fetchsv(_nomg) */
#define GV_CACHE_ONLY 0x1000 /* return stash only if found in cache;
- used only in flags parameter to gv_stash* family */
+ used only in flags parameter to gv_stash* family */
/* Flags for gv_fetchmeth_pvn and gv_autoload_pvn*/
#define GV_SUPER 0x1000 /* SUPER::method */
+#define GV_NOUNIVERSAL 0x2000 /* Skip UNIVERSAL lookup */
/* Flags for gv_autoload_*/
#define GV_AUTOLOAD_ISMETHOD 1 /* autoloading a method? */
/* SVf_UTF8 (more accurately the return value from SvUTF8) is also valid
- as a flag to various gv_* functions, so ensure it lies
- outside this range.
+ as a flag to various gv_* functions, so ensure it lies
+ outside this range.
*/
#define GV_NOADD_MASK \
@@ -260,19 +266,26 @@ Return the CV from the GV.
#define gv_fetchmethod(stash, name) gv_fetchmethod_autoload(stash, name, TRUE)
#define gv_fetchsv_nomg(n,f,t) gv_fetchsv(n,(f)|GV_NO_SVGMAGIC,t)
#define gv_init(gv,stash,name,len,multi) \
- gv_init_pvn(gv,stash,name,len,GV_ADDMULTI*!!(multi))
+ gv_init_pvn(gv,stash,name,len,GV_ADDMULTI*!!(multi))
#define gv_fetchmeth(stash,name,len,level) gv_fetchmeth_pvn(stash, name, len, level, 0)
#define gv_fetchmeth_autoload(stash,name,len,level) gv_fetchmeth_pvn_autoload(stash, name, len, level, 0)
#define gv_fetchmethod_flags(stash,name,flags) gv_fetchmethod_pv_flags(stash, name, flags)
-#define gv_autoload4(stash, name, len, method) \
- gv_autoload_pvn(stash, name, len, !!(method))
+
+/*
+=for apidoc gv_autoload4
+Equivalent to C<L</gv_autoload_pvn>>.
+
+=cut
+*/
+#define gv_autoload4(stash, name, len, autoload) \
+ gv_autoload_pvn(stash, name, len, !!(autoload))
#define newGVgen(pack) newGVgen_flags(pack, 0)
#define gv_method_changed(gv) \
( \
- assert_(isGV_with_GP(gv)) \
- GvREFCNT(gv) > 1 \
- ? (void)++PL_sub_generation \
- : mro_method_changed_in(GvSTASH(gv)) \
+ assert_(isGV_with_GP(gv)) \
+ GvREFCNT(gv) > 1 \
+ ? (void)++PL_sub_generation \
+ : mro_method_changed_in(GvSTASH(gv)) \
)
#define gv_AVadd(gv) gv_add_by_type((gv), SVt_PVAV)
diff --git a/Master/tlpkg/tlperl/lib/CORE/handy.h b/Master/tlpkg/tlperl/lib/CORE/handy.h
index fd0866828c4..63441e2a224 100644
--- a/Master/tlpkg/tlperl/lib/CORE/handy.h
+++ b/Master/tlpkg/tlperl/lib/CORE/handy.h
@@ -18,16 +18,40 @@
# define Null(type) ((type)NULL)
/*
-=head1 Handy Values
-
+=for apidoc_section $string
=for apidoc AmnU||Nullch
Null character pointer. (No longer available when C<PERL_CORE> is
defined.)
+=for apidoc_section $SV
=for apidoc AmnU||Nullsv
Null SV pointer. (No longer available when C<PERL_CORE> is defined.)
=cut
+
+Below are signatures of functions from config.h which can't easily be gleaned
+from it, and are very unlikely to change
+
+=for apidoc_section $signals
+=for apidoc Am|int|Sigsetjmp|jmp_buf env|int savesigs
+=for apidoc Am|void|Siglongjmp|jmp_buf env|int val
+
+=for apidoc_section $filesystem
+=for apidoc Am|void *|FILE_ptr|FILE * f
+=for apidoc Am|Size_t|FILE_cnt|FILE * f
+=for apidoc Am|void *|FILE_base|FILE * f
+=for apidoc Am|Size_t|FILE_bufsiz|FILE *f
+
+=for apidoc_section $string
+=for apidoc Amu|token|CAT2|token x|token y
+=for apidoc Amu|string|STRINGIFY|token x
+
+=for apidoc_section $numeric
+=for apidoc Am|double|Drand01
+=for apidoc Am|void|seedDrand01|Rand_seed_t x
+=for apidoc Am|char *|Gconvert|double x|Size_t n|bool t|char * b
+
+=cut
*/
# define Nullch Null(char*)
@@ -44,17 +68,33 @@ Null SV pointer. (No longer available when C<PERL_CORE> is defined.)
#define TRUE (1)
#define FALSE (0)
-/* The MUTABLE_*() macros cast pointers to the types shown, in such a way
- * (compiler permitting) that casting away const-ness will give a warning;
- * e.g.:
- *
- * const SV *sv = ...;
- * AV *av1 = (AV*)sv; <== BAD: the const has been silently cast away
- * AV *av2 = MUTABLE_AV(sv); <== GOOD: it may warn
+/*
+=for apidoc_section $SV
+=for apidoc Am|void *|MUTABLE_PTR|void * p
+=for apidoc_item |AV *|MUTABLE_AV|AV * p
+=for apidoc_item |CV *|MUTABLE_CV|CV * p
+=for apidoc_item |GV *|MUTABLE_GV|GV * p
+=for apidoc_item |HV *|MUTABLE_HV|HV * p
+=for apidoc_item |IO *|MUTABLE_IO|IO * p
+=for apidoc_item |SV *|MUTABLE_SV|SV * p
+
+The C<MUTABLE_I<*>>() macros cast pointers to the types shown, in such a way
+(compiler permitting) that casting away const-ness will give a warning;
+e.g.:
+
+ const SV *sv = ...;
+ AV *av1 = (AV*)sv; <== BAD: the const has been silently
+ cast away
+ AV *av2 = MUTABLE_AV(sv); <== GOOD: it may warn
+
+C<MUTABLE_PTR> is the base macro used to derive new casts. The other
+already-built-in ones return pointers to what their names indicate.
+
+=cut
*/
-#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
-# define MUTABLE_PTR(p) ({ void *_p = (p); _p; })
+#if defined(PERL_USE_GCC_BRACE_GROUPS)
+# define MUTABLE_PTR(p) ({ void *p_ = (p); p_; })
#else
# define MUTABLE_PTR(p) ((void *) (p))
#endif
@@ -98,6 +138,7 @@ Null SV pointer. (No longer available when C<PERL_CORE> is defined.)
#endif
/*
+=for apidoc_section $casting
=for apidoc Am|bool|cBOOL|bool expr
Cast-to-bool. A simple S<C<(bool) I<expr>>> cast may not do the right thing:
@@ -142,13 +183,13 @@ C<(bool)!!(cbool)> in a ternary triggers a bug in xlc on AIX
For dealing with issues that may arise from various 32/64-bit
systems, we will ask Configure to check out
- SHORTSIZE == sizeof(short)
- INTSIZE == sizeof(int)
- LONGSIZE == sizeof(long)
- LONGLONGSIZE == sizeof(long long) (if HAS_LONG_LONG)
- PTRSIZE == sizeof(void *)
- DOUBLESIZE == sizeof(double)
- LONG_DOUBLESIZE == sizeof(long double) (if HAS_LONG_DOUBLE).
+ SHORTSIZE == sizeof(short)
+ INTSIZE == sizeof(int)
+ LONGSIZE == sizeof(long)
+ LONGLONGSIZE == sizeof(long long) (if HAS_LONG_LONG)
+ PTRSIZE == sizeof(void *)
+ DOUBLESIZE == sizeof(double)
+ LONG_DOUBLESIZE == sizeof(long double) (if HAS_LONG_DOUBLE).
*/
@@ -176,60 +217,86 @@ typedef I64TYPE I64;
typedef U64TYPE U64;
#endif
-#if defined(UINT8_MAX) && defined(INT16_MAX) && defined(INT32_MAX)
-
/* I8_MAX and I8_MIN constants are not defined, as I8 is an ambiguous type.
Please search CHAR_MAX in perl.h for further details. */
-#define U8_MAX UINT8_MAX
-#define U8_MIN UINT8_MIN
-
-#define I16_MAX INT16_MAX
-#define I16_MIN INT16_MIN
-#define U16_MAX UINT16_MAX
-#define U16_MIN UINT16_MIN
-
-#define I32_MAX INT32_MAX
-#define I32_MIN INT32_MIN
-#ifndef UINT32_MAX_BROKEN /* e.g. HP-UX with gcc messes this up */
-# define U32_MAX UINT32_MAX
+#ifdef UINT8_MAX
+# define U8_MAX UINT8_MAX
#else
-# define U32_MAX 4294967295U
+# define U8_MAX PERL_UCHAR_MAX
#endif
-#define U32_MIN UINT32_MIN
-
+#ifdef UINT8_MIN
+# define U8_MIN UINT8_MIN
#else
+# define U8_MIN PERL_UCHAR_MIN
+#endif
-/* I8_MAX and I8_MIN constants are not defined, as I8 is an ambiguous type.
- Please search CHAR_MAX in perl.h for further details. */
-#define U8_MAX PERL_UCHAR_MAX
-#define U8_MIN PERL_UCHAR_MIN
-
-#define I16_MAX PERL_SHORT_MAX
-#define I16_MIN PERL_SHORT_MIN
-#define U16_MAX PERL_USHORT_MAX
-#define U16_MIN PERL_USHORT_MIN
-
-#if LONGSIZE > 4
-# define I32_MAX PERL_INT_MAX
-# define I32_MIN PERL_INT_MIN
-# define U32_MAX PERL_UINT_MAX
-# define U32_MIN PERL_UINT_MIN
+#ifdef INT16_MAX
+# define I16_MAX INT16_MAX
+#else
+# define I16_MAX PERL_SHORT_MAX
+#endif
+#ifdef INT16_MIN
+# define I16_MIN INT16_MIN
+#else
+# define I16_MIN PERL_SHORT_MIN
+#endif
+#ifdef UINT16_MAX
+# define U16_MAX UINT16_MAX
#else
-# define I32_MAX PERL_LONG_MAX
-# define I32_MIN PERL_LONG_MIN
-# define U32_MAX PERL_ULONG_MAX
-# define U32_MIN PERL_ULONG_MIN
+# define U16_MAX PERL_USHORT_MAX
+#endif
+#ifdef UINT16_MIN
+# define U16_MIN UINT16_MIN
+#else
+# define U16_MIN PERL_USHORT_MIN
#endif
+#ifdef INT32_MAX
+# define I32_MAX INT32_MAX
+#elif LONGSIZE > 4
+# define I32_MAX PERL_INT_MAX
+#else
+# define I32_MAX PERL_LONG_MAX
+#endif
+#ifdef INT32_MIN
+# define I32_MIN INT32_MIN
+#elif LONGSIZE > 4
+# define I32_MIN PERL_INT_MIN
+#else
+# define I32_MIN PERL_LONG_MIN
+#endif
+#ifdef UINT32_MAX
+# ifndef UINT32_MAX_BROKEN /* e.g. HP-UX with gcc messes this up */
+# define U32_MAX UINT_MAX
+# else
+# define U32_MAX 4294967295U
+# endif
+#elif LONGSIZE > 4
+# define U32_MAX PERL_UINT_MAX
+#else
+# define U32_MAX PERL_ULONG_MAX
+#endif
+#ifdef UINT32_MIN
+# define U32_MIN UINT32_MIN
+#elif LONGSIZE > 4
+# define U32_MIN PERL_UINT_MIN
+#else
+# define U32_MIN PERL_ULONG_MIN
#endif
-/* These C99 typedefs are useful sometimes for, say, loop variables whose
- * maximum values are small, but for which speed trumps size. If we have a C99
- * compiler, use that. Otherwise, a plain 'int' should be good enough.
- *
- * Restrict these to core for now until we are more certain this is a good
- * idea. */
-#if defined(PERL_CORE) || defined(PERL_EXT)
+/*
+=for apidoc_section $integer
+=for apidoc Ay|| PERL_INT_FAST8_T
+=for apidoc_item PERL_INT_FAST16_T
+=for apidoc_item PERL_UINT_FAST8_T
+=for apidoc_item PERL_UINT_FAST16_T
+
+These are equivalent to the correspondingly-named C99 typedefs on platforms
+that have those; they evaluate to C<int> and C<unsigned int> on platforms that
+don't, so that you can portably take advantage of this C99 feature.
+
+=cut
+*/
# ifdef I_STDINT
typedef int_fast8_t PERL_INT_FAST8_T;
typedef uint_fast8_t PERL_UINT_FAST8_T;
@@ -241,10 +308,12 @@ typedef U64TYPE U64;
typedef int PERL_INT_FAST16_T;
typedef unsigned int PERL_UINT_FAST16_T;
# endif
-#endif
/* log(2) (i.e., log base 10 of 2) is pretty close to 0.30103, just in case
- * anyone is grepping for it */
+ * anyone is grepping for it. So BIT_DIGITS gives the number of decimal digits
+ * required to represent any possible unsigned number containing N bits.
+ * TYPE_DIGITS gives the number of decimal digits required to represent any
+ * possible unsigned number of type T. */
#define BIT_DIGITS(N) (((N)*146)/485 + 1) /* log10(2) =~ 146/485 */
#define TYPE_DIGITS(T) BIT_DIGITS(sizeof(T) * 8)
#define TYPE_CHARS(T) (TYPE_DIGITS(T) + 2) /* sign, NUL */
@@ -269,8 +338,15 @@ typedef U64TYPE U64;
# define isPOWER_OF_2(n) ((n) && ((n) & ((n)-1)) == 0)
#endif
+/* Returns a mask with the lowest n bits set */
+#define nBIT_MASK(n) ((UINTMAX_C(1) << (n)) - 1)
+
+/* The largest unsigned number that will fit into n bits */
+#define nBIT_UMAX(n) nBIT_MASK(n)
+
/*
-=for apidoc Am|void|__ASSERT_|bool expr
+=for apidoc_section $directives
+=for apidoc Am||__ASSERT_|bool expr
This is a helper macro to avoid preprocessor issues, replaced by nothing
unless under DEBUGGING, where it expands to an assert of its argument,
@@ -279,7 +355,7 @@ assert(), we would get a comma with nothing before it when not DEBUGGING.
=cut
-We also use empty definition under Coverity since the __ASSERT__
+We also use empty definition under Coverity since the __ASSERT_
checks often check for things that Really Cannot Happen, and Coverity
detects that and gets all excited. */
@@ -291,7 +367,7 @@ detects that and gets all excited. */
#endif
/*
-=head1 SV Manipulation Functions
+=for apidoc_section $SV
=for apidoc Ama|SV*|newSVpvs|"literal string"
Like C<newSVpvn>, but takes a literal string instead of a
@@ -333,7 +409,7 @@ string/length pair.
Like C<sv_setref_pvn>, but takes a literal string instead of
a string/length pair.
-=head1 Memory Management
+=for apidoc_section $string
=for apidoc Ama|char*|savepvs|"literal string"
Like C<savepvn>, but takes a literal string instead of a
@@ -343,13 +419,13 @@ string/length pair.
A version of C<savepvs()> which allocates the duplicate string in memory
which is shared between threads.
-=head1 GV Functions
+=for apidoc_section $GV
=for apidoc Am|HV*|gv_stashpvs|"name"|I32 create
Like C<gv_stashpvn>, but takes a literal string instead of a
string/length pair.
-=head1 Hash Manipulation Functions
+=for apidoc_section $HV
=for apidoc Am|SV**|hv_fetchs|HV* tb|"key"|I32 lval
Like C<hv_fetch>, but takes a literal string instead of a
@@ -360,7 +436,7 @@ Like C<hv_store>, but takes a literal string instead of a
string/length pair
and omits the hash parameter.
-=head1 Lexer interface
+=for apidoc_section $lexer
=for apidoc Amx|void|lex_stuff_pvs|"pv"|U32 flags
@@ -371,7 +447,7 @@ a string/length pair.
*/
/*
-=head1 Handy Values
+=for apidoc_section $string
=for apidoc Amu|pair|STR_WITH_LEN|"literal string"
@@ -384,7 +460,6 @@ Perl_xxx(aTHX_ ...) form for any API calls where it's used.
=cut
*/
-
#define STR_WITH_LEN(s) ("" s ""), (sizeof(s)-1)
/* STR_WITH_LEN() shortcuts */
@@ -408,10 +483,10 @@ Perl_xxx(aTHX_ ...) form for any API calls where it's used.
#define savesharedpvs(str) Perl_savesharedpvn(aTHX_ STR_WITH_LEN(str))
#define gv_stashpvs(str, create) \
Perl_gv_stashpvn(aTHX_ STR_WITH_LEN(str), create)
-#define gv_fetchpvs(namebeg, add, sv_type) \
- Perl_gv_fetchpvn_flags(aTHX_ STR_WITH_LEN(namebeg), add, sv_type)
-#define gv_fetchpvn(namebeg, len, add, sv_type) \
- Perl_gv_fetchpvn_flags(aTHX_ namebeg, len, add, sv_type)
+
+#define gv_fetchpvs(namebeg, flags, sv_type) \
+ Perl_gv_fetchpvn_flags(aTHX_ STR_WITH_LEN(namebeg), flags, sv_type)
+#define gv_fetchpvn gv_fetchpvn_flags
#define sv_catxmlpvs(dsv, str, utf8) \
Perl_sv_catxmlpvn(aTHX_ dsv, STR_WITH_LEN(str), utf8)
@@ -419,10 +494,105 @@ Perl_xxx(aTHX_ ...) form for any API calls where it's used.
#define lex_stuff_pvs(pv,flags) Perl_lex_stuff_pvn(aTHX_ STR_WITH_LEN(pv), flags)
#define get_cvs(str, flags) \
- Perl_get_cvn_flags(aTHX_ STR_WITH_LEN(str), (flags))
+ Perl_get_cvn_flags(aTHX_ STR_WITH_LEN(str), (flags))
+
+/* internal helpers */
+/* Transitional */
+#ifndef PERL_VERSION_MAJOR
+# define PERL_VERSION_MAJOR PERL_REVISION
+#else
+# undef PERL_REVISION /* We don't want code to be using these */
+#endif
+#ifndef PERL_VERSION_MINOR
+# define PERL_VERSION_MINOR PERL_VERSION
+#else
+# undef PERL_VERSION
+#endif
+#ifndef PERL_VERSION_PATCH
+# define PERL_VERSION_PATCH PERL_SUBVERSION
+#else
+# undef PERL_SUBVERSION
+#endif
+
+#define PERL_JNP_TO_DECIMAL_(maJor,miNor,Patch) \
+ /* '10*' leaves room for things like alpha, beta, releases */ \
+ (10 * ((maJor) * 1000000) + ((miNor) * 1000) + (Patch))
+#define PERL_DECIMAL_VERSION_ \
+ PERL_JNP_TO_DECIMAL_(PERL_VERSION_MAJOR, PERL_VERSION_MINOR, \
+ PERL_VERSION_PATCH)
/*
-=head1 Miscellaneous Functions
+=for apidoc_section $versioning
+=for apidoc AmR|bool|PERL_VERSION_EQ|const U8 major|const U8 minor|const U8 patch
+=for apidoc_item PERL_VERSION_NE
+=for apidoc_item PERL_VERSION_LT
+=for apidoc_item PERL_VERSION_LE
+=for apidoc_item PERL_VERSION_GT
+=for apidoc_item PERL_VERSION_GE
+
+Returns whether or not the perl currently being compiled has the specified
+relationship to the perl given by the parameters. For example,
+
+ #if PERL_VERSION_GT(5,24,2)
+ code that will only be compiled on perls after v5.24.2
+ #else
+ fallback code
+ #endif
+
+Note that this is usable in making compile-time decisions
+
+You may use the special value '*' for the final number to mean ALL possible
+values for it. Thus,
+
+ #if PERL_VERSION_EQ(5,31,'*')
+
+means all perls in the 5.31 series. And
+
+ #if PERL_VERSION_NE(5,24,'*')
+
+means all perls EXCEPT 5.24 ones. And
+
+ #if PERL_VERSION_LE(5,9,'*')
+
+is effectively
+
+ #if PERL_VERSION_LT(5,10,0)
+
+This means you don't have to think so much when converting from the existing
+deprecated C<PERL_VERSION> to using this macro:
+
+ #if PERL_VERSION <= 9
+
+becomes
+
+ #if PERL_VERSION_LE(5,9,'*')
+
+=cut
+*/
+
+/* N.B. These don't work if the patch version is 42 or 92, as those are what
+ * '*' is in ASCII and EBCDIC respectively */
+# define PERL_VERSION_EQ(j,n,p) \
+ (((p) == '*') \
+ ? ( (j) == PERL_VERSION_MAJOR \
+ && (n) == PERL_VERSION_MINOR) \
+ : (PERL_DECIMAL_VERSION_ == PERL_JNP_TO_DECIMAL_(j,n,p)))
+# define PERL_VERSION_NE(j,n,p) (! PERL_VERSION_EQ(j,n,p))
+
+# define PERL_VERSION_LT(j,n,p) /* < '*' effectively means < 0 */ \
+ (PERL_DECIMAL_VERSION_ < PERL_JNP_TO_DECIMAL_( (j), \
+ (n), \
+ (((p) == '*') ? 0 : p)))
+# define PERL_VERSION_GE(j,n,p) (! PERL_VERSION_LT(j,n,p))
+
+# define PERL_VERSION_LE(j,n,p) /* <= '*' effectively means < n+1 */ \
+ (PERL_DECIMAL_VERSION_ < PERL_JNP_TO_DECIMAL_( (j), \
+ (((p) == '*') ? ((n)+1) : (n)), \
+ (((p) == '*') ? 0 : p)))
+# define PERL_VERSION_GT(j,n,p) (! PERL_VERSION_LE(j,n,p))
+
+/*
+=for apidoc_section $string
=for apidoc Am|bool|strNE|char* s1|char* s2
Test two C<NUL>-terminated strings to see if they are different. Returns true
@@ -461,22 +631,24 @@ wrapper for C<strncmp>).
=for apidoc Am|bool|memEQ|char* s1|char* s2|STRLEN len
Test two buffers (which may contain embedded C<NUL> characters, to see if they
are equal. The C<len> parameter indicates the number of bytes to compare.
-Returns zero if equal, or non-zero if non-equal.
+Returns true or false. It is undefined behavior if either of the buffers
+doesn't contain at least C<len> bytes.
=for apidoc Am|bool|memEQs|char* s1|STRLEN l1|"s2"
Like L</memEQ>, but the second string is a literal enclosed in double quotes,
C<l1> gives the number of bytes in C<s1>.
-Returns zero if equal, or non-zero if non-equal.
+Returns true or false.
=for apidoc Am|bool|memNE|char* s1|char* s2|STRLEN len
Test two buffers (which may contain embedded C<NUL> characters, to see if they
are not equal. The C<len> parameter indicates the number of bytes to compare.
-Returns zero if non-equal, or non-zero if equal.
+Returns true or false. It is undefined behavior if either of the buffers
+doesn't contain at least C<len> bytes.
=for apidoc Am|bool|memNEs|char* s1|STRLEN l1|"s2"
Like L</memNE>, but the second string is a literal enclosed in double quotes,
C<l1> gives the number of bytes in C<s1>.
-Returns zero if non-equal, or zero if non-equal.
+Returns true or false.
=for apidoc Am|bool|memCHRs|"list"|char c
Returns the position of the first occurence of the byte C<c> in the literal
@@ -591,7 +763,7 @@ based on the underlying C library functions):
* the current locale will use the tests that begin with "lc".
*/
-#ifdef HAS_SETLOCALE /* XXX Is there a better test for this? */
+#ifdef USE_LOCALE
# ifndef CTYPE256
# define CTYPE256
# endif
@@ -673,38 +845,43 @@ character is malformed in some way, the program may croak, or the function may
return FALSE, at the discretion of the implementation, and subject to change in
future releases.
-=for apidoc Am|bool|isALPHA|int ch
+=for apidoc Am|bool|isALPHA|UV ch
+=for apidoc_item ||isALPHA_A|UV ch
+=for apidoc_item ||isALPHA_L1|UV ch
+=for apidoc_item ||isALPHA_uvchr|UV ch
+=for apidoc_item ||isALPHA_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isALPHA_utf8|U8 * s|U8 * end
+=for apidoc_item ||isALPHA_LC|UV ch
+=for apidoc_item ||isALPHA_LC_uvchr|UV ch
+=for apidoc_item ||isALPHA_LC_utf8_safe|U8 * s| U8 *end
Returns a boolean indicating whether the specified input is one of C<[A-Za-z]>,
analogous to C<m/[[:alpha:]]/>.
See the L<top of this section|/Character classification> for an explanation of
-variants
-C<isALPHA_A>, C<isALPHA_L1>, C<isALPHA_uvchr>, C<isALPHA_utf8>,
-C<isALPHA_utf8_safe>, C<isALPHA_LC>, C<isALPHA_LC_uvchr>, C<isALPHA_LC_utf8>,
-and C<isALPHA_LC_utf8_safe>.
+the variants.
=cut
-Here and below, we add the protoypes of these macros for downstream programs
+Here and below, we add the prototypes of these macros for downstream programs
that would be interested in them, such as Devel::PPPort
-=for apidoc Amh|bool|isALPHA_A|int ch
-=for apidoc Amh|bool|isALPHA_L1|int ch
-=for apidoc Amh|bool|isALPHA_uvchr|int ch
-=for apidoc Amh|bool|isALPHA_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isALPHA_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isALPHA_LC|int ch
-=for apidoc Amh|bool|isALPHA_LC_uvchr|int ch
-=for apidoc Amh|bool|isALPHA_LC_utf8_safe|U8 * s| U8 *end
-
-=for apidoc Am|bool|isALPHANUMERIC|int ch
+=for apidoc Am|bool|isALPHANUMERIC|UV ch
+=for apidoc_item ||isALPHANUMERIC_A|UV ch
+=for apidoc_item ||isALPHANUMERIC_L1|UV ch
+=for apidoc_item ||isALPHANUMERIC_uvchr|UV ch
+=for apidoc_item ||isALPHANUMERIC_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isALPHANUMERIC_utf8|U8 * s|U8 * end
+=for apidoc_item ||isALPHANUMERIC_LC|UV ch
+=for apidoc_item ||isALPHANUMERIC_LC_uvchr|UV ch
+=for apidoc_item ||isALPHANUMERIC_LC_utf8_safe|U8 * s| U8 *end
+=for apidoc_item ||isALNUMC|UV ch
+=for apidoc_item ||isALNUMC_A|UV ch
+=for apidoc_item ||isALNUMC_L1|UV ch
+=for apidoc_item ||isALNUMC_LC|UV ch
+=for apidoc_item ||isALNUMC_LC_uvchr|UV ch
Returns a boolean indicating whether the specified character is one of
C<[A-Za-z0-9]>, analogous to C<m/[[:alnum:]]/>.
See the L<top of this section|/Character classification> for an explanation of
-variants
-C<isALPHANUMERIC_A>, C<isALPHANUMERIC_L1>, C<isALPHANUMERIC_uvchr>,
-C<isALPHANUMERIC_utf8>, C<isALPHANUMERIC_utf8_safe>, C<isALPHANUMERIC_LC>,
-C<isALPHANUMERIC_LC_uvchr>, C<isALPHANUMERIC_LC_utf8>, and
-C<isALPHANUMERIC_LC_utf8_safe>.
+the variants.
A (discouraged from use) synonym is C<isALNUMC> (where the C<C> suffix means
this corresponds to the C language alphanumeric definition). Also
@@ -712,172 +889,144 @@ there are the variants
C<isALNUMC_A>, C<isALNUMC_L1>
C<isALNUMC_LC>, and C<isALNUMC_LC_uvchr>.
-=for apidoc Amh|bool|isALPHANUMERIC_A|int ch
-=for apidoc Amh|bool|isALPHANUMERIC_L1|int ch
-=for apidoc Amh|bool|isALPHANUMERIC_uvchr|int ch
-=for apidoc Amh|bool|isALPHANUMERIC_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isALPHANUMERIC_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isALPHANUMERIC_LC|int ch
-=for apidoc Amh|bool|isALPHANUMERIC_LC_uvchr|int ch
-=for apidoc Amh|bool|isALPHANUMERIC_LC_utf8_safe|U8 * s| U8 *end
-=for apidoc Amh|bool|isALNUMC|int ch
-=for apidoc Amh|bool|isALNUMC_A|int ch
-=for apidoc Amh|bool|isALNUMC_L1|int ch
-=for apidoc Amh|bool|isALNUMC_LC|int ch
-=for apidoc Amh|bool|isALNUMC_LC_uvchr|int ch
-
-=for apidoc Am|bool|isASCII|int ch
+=for apidoc Am|bool|isASCII|UV ch
+=for apidoc_item ||isASCII_A|UV ch
+=for apidoc_item ||isASCII_L1|UV ch
+=for apidoc_item ||isASCII_uvchr|UV ch
+=for apidoc_item ||isASCII_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isASCII_utf8|U8 * s|U8 * end
+=for apidoc_item ||isASCII_LC|UV ch
+=for apidoc_item ||isASCII_LC_uvchr|UV ch
+=for apidoc_item ||isASCII_LC_utf8_safe|U8 * s| U8 *end
Returns a boolean indicating whether the specified character is one of the 128
characters in the ASCII character set, analogous to C<m/[[:ascii:]]/>.
On non-ASCII platforms, it returns TRUE iff this
character corresponds to an ASCII character. Variants C<isASCII_A()> and
C<isASCII_L1()> are identical to C<isASCII()>.
See the L<top of this section|/Character classification> for an explanation of
-variants
-C<isASCII_uvchr>, C<isASCII_utf8>, C<isASCII_utf8_safe>, C<isASCII_LC>,
-C<isASCII_LC_uvchr>, C<isASCII_LC_utf8>, and C<isASCII_LC_utf8_safe>.
+the variants.
Note, however, that some platforms do not have the C library routine
C<isascii()>. In these cases, the variants whose names contain C<LC> are the
same as the corresponding ones without.
-=for apidoc Amh|bool|isASCII_A|int ch
-=for apidoc Amh|bool|isASCII_L1|int ch
-=for apidoc Amh|bool|isASCII_uvchr|int ch
-=for apidoc Amh|bool|isASCII_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isASCII_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isASCII_LC|int ch
-=for apidoc Amh|bool|isASCII_LC_uvchr|int ch
-=for apidoc Amh|bool|isASCII_LC_utf8_safe|U8 * s| U8 *end
-
Also note, that because all ASCII characters are UTF-8 invariant (meaning they
have the exact same representation (always a single byte) whether encoded in
UTF-8 or not), C<isASCII> will give the correct results when called with any
byte in any string encoded or not in UTF-8. And similarly C<isASCII_utf8> and
C<isASCII_utf8_safe> will work properly on any string encoded or not in UTF-8.
-=for apidoc Am|bool|isBLANK|char ch
+=for apidoc Am|bool|isBLANK|UV ch
+=for apidoc_item ||isBLANK_A|UV ch
+=for apidoc_item ||isBLANK_L1|UV ch
+=for apidoc_item ||isBLANK_uvchr|UV ch
+=for apidoc_item ||isBLANK_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isBLANK_utf8|U8 * s|U8 * end
+=for apidoc_item ||isBLANK_LC|UV ch
+=for apidoc_item ||isBLANK_LC_uvchr|UV ch
+=for apidoc_item ||isBLANK_LC_utf8_safe|U8 * s| U8 *end
Returns a boolean indicating whether the specified character is a
character considered to be a blank, analogous to C<m/[[:blank:]]/>.
See the L<top of this section|/Character classification> for an explanation of
-variants
-C<isBLANK_A>, C<isBLANK_L1>, C<isBLANK_uvchr>, C<isBLANK_utf8>,
-C<isBLANK_utf8_safe>, C<isBLANK_LC>, C<isBLANK_LC_uvchr>, C<isBLANK_LC_utf8>,
-and C<isBLANK_LC_utf8_safe>. Note,
+the variants.
+Note,
however, that some platforms do not have the C library routine
C<isblank()>. In these cases, the variants whose names contain C<LC> are
the same as the corresponding ones without.
-=for apidoc Amh|bool|isBLANK_A|int ch
-=for apidoc Amh|bool|isBLANK_L1|int ch
-=for apidoc Amh|bool|isBLANK_uvchr|int ch
-=for apidoc Amh|bool|isBLANK_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isBLANK_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isBLANK_LC|int ch
-=for apidoc Amh|bool|isBLANK_LC_uvchr|int ch
-=for apidoc Amh|bool|isBLANK_LC_utf8_safe|U8 * s| U8 *end
+=for apidoc Am|bool|isCNTRL|UV ch
+=for apidoc_item ||isCNTRL_A|UV ch
+=for apidoc_item ||isCNTRL_L1|UV ch
+=for apidoc_item ||isCNTRL_uvchr|UV ch
+=for apidoc_item ||isCNTRL_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isCNTRL_utf8|U8 * s|U8 * end
+=for apidoc_item ||isCNTRL_LC|UV ch
+=for apidoc_item ||isCNTRL_LC_uvchr|UV ch
+=for apidoc_item ||isCNTRL_LC_utf8_safe|U8 * s| U8 *end
-=for apidoc Am|bool|isCNTRL|char ch
Returns a boolean indicating whether the specified character is a
control character, analogous to C<m/[[:cntrl:]]/>.
See the L<top of this section|/Character classification> for an explanation of
-variants
-C<isCNTRL_A>, C<isCNTRL_L1>, C<isCNTRL_uvchr>, C<isCNTRL_utf8>,
-C<isCNTRL_utf8_safe>, C<isCNTRL_LC>, C<isCNTRL_LC_uvchr>, C<isCNTRL_LC_utf8>
-and C<isCNTRL_LC_utf8_safe>. On EBCDIC
-platforms, you almost always want to use the C<isCNTRL_L1> variant.
-
-=for apidoc Amh|bool|isCNTRL_A|int ch
-=for apidoc Amh|bool|isCNTRL_L1|int ch
-=for apidoc Amh|bool|isCNTRL_uvchr|int ch
-=for apidoc Amh|bool|isCNTRL_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isCNTRL_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isCNTRL_LC|int ch
-=for apidoc Amh|bool|isCNTRL_LC_uvchr|int ch
-=for apidoc Amh|bool|isCNTRL_LC_utf8_safe|U8 * s| U8 *end
-
-=for apidoc Am|bool|isDIGIT|char ch
+the variants.
+On EBCDIC platforms, you almost always want to use the C<isCNTRL_L1> variant.
+
+=for apidoc Am|bool|isDIGIT|UV ch
+=for apidoc_item ||isDIGIT_A|UV ch
+=for apidoc_item ||isDIGIT_L1|UV ch
+=for apidoc_item ||isDIGIT_uvchr|UV ch
+=for apidoc_item ||isDIGIT_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isDIGIT_utf8|U8 * s|U8 * end
+=for apidoc_item ||isDIGIT_LC|UV ch
+=for apidoc_item ||isDIGIT_LC_uvchr|UV ch
+=for apidoc_item ||isDIGIT_LC_utf8_safe|U8 * s| U8 *end
+
Returns a boolean indicating whether the specified character is a
digit, analogous to C<m/[[:digit:]]/>.
Variants C<isDIGIT_A> and C<isDIGIT_L1> are identical to C<isDIGIT>.
See the L<top of this section|/Character classification> for an explanation of
-variants
-C<isDIGIT_uvchr>, C<isDIGIT_utf8>, C<isDIGIT_utf8_safe>, C<isDIGIT_LC>,
-C<isDIGIT_LC_uvchr>, C<isDIGIT_LC_utf8>, and C<isDIGIT_LC_utf8_safe>.
-
-=for apidoc Amh|bool|isDIGIT_A|int ch
-=for apidoc Amh|bool|isDIGIT_L1|int ch
-=for apidoc Amh|bool|isDIGIT_uvchr|int ch
-=for apidoc Amh|bool|isDIGIT_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isDIGIT_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isDIGIT_LC|int ch
-=for apidoc Amh|bool|isDIGIT_LC_uvchr|int ch
-=for apidoc Amh|bool|isDIGIT_LC_utf8_safe|U8 * s| U8 *end
-
-=for apidoc Am|bool|isGRAPH|char ch
+the variants.
+
+=for apidoc Am|bool|isGRAPH|UV ch
+=for apidoc_item ||isGRAPH_A|UV ch
+=for apidoc_item ||isGRAPH_L1|UV ch
+=for apidoc_item ||isGRAPH_uvchr|UV ch
+=for apidoc_item ||isGRAPH_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isGRAPH_utf8|U8 * s|U8 * end
+=for apidoc_item ||isGRAPH_LC|UV ch
+=for apidoc_item ||isGRAPH_LC_uvchr|UV ch
+=for apidoc_item ||isGRAPH_LC_utf8_safe|U8 * s| U8 *end
Returns a boolean indicating whether the specified character is a
graphic character, analogous to C<m/[[:graph:]]/>.
See the L<top of this section|/Character classification> for an explanation of
-variants C<isGRAPH_A>, C<isGRAPH_L1>, C<isGRAPH_uvchr>, C<isGRAPH_utf8>,
-C<isGRAPH_utf8_safe>, C<isGRAPH_LC>, C<isGRAPH_LC_uvchr>,
-C<isGRAPH_LC_utf8_safe>, and C<isGRAPH_LC_utf8_safe>.
-
-=for apidoc Amh|bool|isGRAPH_A|int ch
-=for apidoc Amh|bool|isGRAPH_L1|int ch
-=for apidoc Amh|bool|isGRAPH_uvchr|int ch
-=for apidoc Amh|bool|isGRAPH_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isGRAPH_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isGRAPH_LC|int ch
-=for apidoc Amh|bool|isGRAPH_LC_uvchr|int ch
-=for apidoc Amh|bool|isGRAPH_LC_utf8_safe|U8 * s| U8 *end
-
-=for apidoc Am|bool|isLOWER|char ch
+the variants.
+
+=for apidoc Am|bool|isLOWER|UV ch
+=for apidoc_item ||isLOWER_A|UV ch
+=for apidoc_item ||isLOWER_L1|UV ch
+=for apidoc_item ||isLOWER_uvchr|UV ch
+=for apidoc_item ||isLOWER_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isLOWER_utf8|U8 * s|U8 * end
+=for apidoc_item ||isLOWER_LC|UV ch
+=for apidoc_item ||isLOWER_LC_uvchr|UV ch
+=for apidoc_item ||isLOWER_LC_utf8_safe|U8 * s| U8 *end
Returns a boolean indicating whether the specified character is a
lowercase character, analogous to C<m/[[:lower:]]/>.
See the L<top of this section|/Character classification> for an explanation of
-variants
-C<isLOWER_A>, C<isLOWER_L1>, C<isLOWER_uvchr>, C<isLOWER_utf8>,
-C<isLOWER_utf8_safe>, C<isLOWER_LC>, C<isLOWER_LC_uvchr>, C<isLOWER_LC_utf8>,
-and C<isLOWER_LC_utf8_safe>.
-
-=for apidoc Amh|bool|isLOWER_A|int ch
-=for apidoc Amh|bool|isLOWER_L1|int ch
-=for apidoc Amh|bool|isLOWER_uvchr|int ch
-=for apidoc Amh|bool|isLOWER_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isLOWER_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isLOWER_LC|int ch
-=for apidoc Amh|bool|isLOWER_LC_uvchr|int ch
-=for apidoc Amh|bool|isLOWER_LC_utf8_safe|U8 * s| U8 *end
-
-=for apidoc Am|bool|isOCTAL|char ch
+the variants
+
+=for apidoc Am|bool|isOCTAL|UV ch
+=for apidoc_item ||isOCTAL_A|UV ch
+=for apidoc_item ||isOCTAL_L1|UV ch
Returns a boolean indicating whether the specified character is an
octal digit, [0-7].
The only two variants are C<isOCTAL_A> and C<isOCTAL_L1>; each is identical to
C<isOCTAL>.
-=for apidoc Amh|bool|isOCTAL_A|int ch
-=for apidoc Amh|bool|isOCTAL_L1|int ch
-
-=for apidoc Am|bool|isPUNCT|char ch
+=for apidoc Am|bool|isPUNCT|UV ch
+=for apidoc_item ||isPUNCT_A|UV ch
+=for apidoc_item ||isPUNCT_L1|UV ch
+=for apidoc_item ||isPUNCT_uvchr|UV ch
+=for apidoc_item ||isPUNCT_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isPUNCT_utf8|U8 * s|U8 * end
+=for apidoc_item ||isPUNCT_LC|UV ch
+=for apidoc_item ||isPUNCT_LC_uvchr|UV ch
+=for apidoc_item ||isPUNCT_LC_utf8_safe|U8 * s| U8 *end
Returns a boolean indicating whether the specified character is a
punctuation character, analogous to C<m/[[:punct:]]/>.
Note that the definition of what is punctuation isn't as
straightforward as one might desire. See L<perlrecharclass/POSIX Character
Classes> for details.
See the L<top of this section|/Character classification> for an explanation of
-variants C<isPUNCT_A>, C<isPUNCT_L1>, C<isPUNCT_uvchr>, C<isPUNCT_utf8>,
-C<isPUNCT_utf8_safe>, C<isPUNCT_LC>, C<isPUNCT_LC_uvchr>, C<isPUNCT_LC_utf8>,
-and C<isPUNCT_LC_utf8_safe>.
-
-=for apidoc Amh|bool|isPUNCT_A|int ch
-=for apidoc Amh|bool|isPUNCT_L1|int ch
-=for apidoc Amh|bool|isPUNCT_uvchr|int ch
-=for apidoc Amh|bool|isPUNCT_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isPUNCT_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isPUNCT_LC|int ch
-=for apidoc Amh|bool|isPUNCT_LC_uvchr|int ch
-=for apidoc Amh|bool|isPUNCT_LC_utf8_safe|U8 * s| U8 *end
-
-=for apidoc Am|bool|isSPACE|char ch
+the variants.
+
+=for apidoc Am|bool|isSPACE|UV ch
+=for apidoc_item ||isSPACE_A|UV ch
+=for apidoc_item ||isSPACE_L1|UV ch
+=for apidoc_item ||isSPACE_uvchr|UV ch
+=for apidoc_item ||isSPACE_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isSPACE_utf8|U8 * s|U8 * end
+=for apidoc_item ||isSPACE_LC|UV ch
+=for apidoc_item ||isSPACE_LC_uvchr|UV ch
+=for apidoc_item ||isSPACE_LC_utf8_safe|U8 * s| U8 *end
Returns a boolean indicating whether the specified character is a
whitespace character. This is analogous
to what C<m/\s/> matches in a regular expression. Starting in Perl 5.18
@@ -887,21 +1036,17 @@ precisely what C<m/[[:space:]]/> does. In those releases, the only difference,
in the non-locale variants, was that C<isSPACE()> did not match a vertical tab.
(See L</isPSXSPC> for a macro that matches a vertical tab in all releases.)
See the L<top of this section|/Character classification> for an explanation of
-variants
-C<isSPACE_A>, C<isSPACE_L1>, C<isSPACE_uvchr>, C<isSPACE_utf8>,
-C<isSPACE_utf8_safe>, C<isSPACE_LC>, C<isSPACE_LC_uvchr>, C<isSPACE_LC_utf8>,
-and C<isSPACE_LC_utf8_safe>.
-
-=for apidoc Amh|bool|isSPACE_A|int ch
-=for apidoc Amh|bool|isSPACE_L1|int ch
-=for apidoc Amh|bool|isSPACE_uvchr|int ch
-=for apidoc Amh|bool|isSPACE_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isSPACE_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isSPACE_LC|int ch
-=for apidoc Amh|bool|isSPACE_LC_uvchr|int ch
-=for apidoc Amh|bool|isSPACE_LC_utf8_safe|U8 * s| U8 *end
-
-=for apidoc Am|bool|isPSXSPC|char ch
+the variants.
+
+=for apidoc Am|bool|isPSXSPC|UV ch
+=for apidoc_item ||isPSXSPC_A|UV ch
+=for apidoc_item ||isPSXSPC_L1|UV ch
+=for apidoc_item ||isPSXSPC_uvchr|UV ch
+=for apidoc_item ||isPSXSPC_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isPSXSPC_utf8|U8 * s|U8 * end
+=for apidoc_item ||isPSXSPC_LC|UV ch
+=for apidoc_item ||isPSXSPC_LC_uvchr|UV ch
+=for apidoc_item ||isPSXSPC_LC_utf8_safe|U8 * s| U8 *end
(short for Posix Space)
Starting in 5.18, this is identical in all its forms to the
corresponding C<isSPACE()> macros.
@@ -912,55 +1057,49 @@ C<isSPACE()> forms don't match a Vertical Tab, and the C<isPSXSPC()> forms do.
Otherwise they are identical. Thus this macro is analogous to what
C<m/[[:space:]]/> matches in a regular expression.
See the L<top of this section|/Character classification> for an explanation of
-variants C<isPSXSPC_A>, C<isPSXSPC_L1>, C<isPSXSPC_uvchr>, C<isPSXSPC_utf8>,
-C<isPSXSPC_utf8_safe>, C<isPSXSPC_LC>, C<isPSXSPC_LC_uvchr>,
-C<isPSXSPC_LC_utf8>, and C<isPSXSPC_LC_utf8_safe>.
-
-=for apidoc Amh|bool|isPSXSPC_A|int ch
-=for apidoc Amh|bool|isPSXSPC_L1|int ch
-=for apidoc Amh|bool|isPSXSPC_uvchr|int ch
-=for apidoc Amh|bool|isPSXSPC_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isPSXSPC_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isPSXSPC_LC|int ch
-=for apidoc Amh|bool|isPSXSPC_LC_uvchr|int ch
-=for apidoc Amh|bool|isPSXSPC_LC_utf8_safe|U8 * s| U8 *end
-
-=for apidoc Am|bool|isUPPER|char ch
+the variants.
+
+=for apidoc Am|bool|isUPPER|UV ch
+=for apidoc_item ||isUPPER_A|UV ch
+=for apidoc_item ||isUPPER_L1|UV ch
+=for apidoc_item ||isUPPER_uvchr|UV ch
+=for apidoc_item ||isUPPER_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isUPPER_utf8|U8 * s|U8 * end
+=for apidoc_item ||isUPPER_LC|UV ch
+=for apidoc_item ||isUPPER_LC_uvchr|UV ch
+=for apidoc_item ||isUPPER_LC_utf8_safe|U8 * s| U8 *end
Returns a boolean indicating whether the specified character is an
uppercase character, analogous to C<m/[[:upper:]]/>.
See the L<top of this section|/Character classification> for an explanation of
-variants C<isUPPER_A>, C<isUPPER_L1>, C<isUPPER_uvchr>, C<isUPPER_utf8>,
-C<isUPPER_utf8_safe>, C<isUPPER_LC>, C<isUPPER_LC_uvchr>, C<isUPPER_LC_utf8>,
-and C<isUPPER_LC_utf8_safe>.
-
-=for apidoc Amh|bool|isUPPER_A|int ch
-=for apidoc Amh|bool|isUPPER_L1|int ch
-=for apidoc Amh|bool|isUPPER_uvchr|int ch
-=for apidoc Amh|bool|isUPPER_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isUPPER_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isUPPER_LC|int ch
-=for apidoc Amh|bool|isUPPER_LC_uvchr|int ch
-=for apidoc Amh|bool|isUPPER_LC_utf8_safe|U8 * s| U8 *end
-
-=for apidoc Am|bool|isPRINT|char ch
+the variants.
+
+=for apidoc Am|bool|isPRINT|UV ch
+=for apidoc_item ||isPRINT_A|UV ch
+=for apidoc_item ||isPRINT_L1|UV ch
+=for apidoc_item ||isPRINT_uvchr|UV ch
+=for apidoc_item ||isPRINT_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isPRINT_utf8|U8 * s|U8 * end
+=for apidoc_item ||isPRINT_LC|UV ch
+=for apidoc_item ||isPRINT_LC_uvchr|UV ch
+=for apidoc_item ||isPRINT_LC_utf8_safe|U8 * s| U8 *end
Returns a boolean indicating whether the specified character is a
printable character, analogous to C<m/[[:print:]]/>.
See the L<top of this section|/Character classification> for an explanation of
-variants
-C<isPRINT_A>, C<isPRINT_L1>, C<isPRINT_uvchr>, C<isPRINT_utf8>,
-C<isPRINT_utf8_safe>, C<isPRINT_LC>, C<isPRINT_LC_uvchr>, C<isPRINT_LC_utf8>,
-and C<isPRINT_LC_utf8_safe>.
-
-=for apidoc Amh|bool|isPRINT_A|int ch
-=for apidoc Amh|bool|isPRINT_L1|int ch
-=for apidoc Amh|bool|isPRINT_uvchr|int ch
-=for apidoc Amh|bool|isPRINT_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isPRINT_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isPRINT_LC|int ch
-=for apidoc Amh|bool|isPRINT_LC_uvchr|int ch
-=for apidoc Amh|bool|isPRINT_LC_utf8_safe|U8 * s| U8 *end
-
-=for apidoc Am|bool|isWORDCHAR|char ch
+the variants.
+
+=for apidoc Am|bool|isWORDCHAR|UV ch
+=for apidoc_item ||isWORDCHAR_A|UV ch
+=for apidoc_item ||isWORDCHAR_L1|UV ch
+=for apidoc_item ||isWORDCHAR_uvchr|UV ch
+=for apidoc_item ||isWORDCHAR_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isWORDCHAR_utf8|U8 * s|U8 * end
+=for apidoc_item ||isWORDCHAR_LC|UV ch
+=for apidoc_item ||isWORDCHAR_LC_uvchr|UV ch
+=for apidoc_item ||isWORDCHAR_LC_utf8_safe|U8 * s| U8 *end
+=for apidoc_item ||isALNUM|UV ch
+=for apidoc_item ||isALNUM_A|UV ch
+=for apidoc_item ||isALNUM_LC|UV ch
+=for apidoc_item ||isALNUM_LC_uvchr|UV ch
Returns a boolean indicating whether the specified character is a character
that is a word character, analogous to what C<m/\w/> and C<m/[[:word:]]/> match
in a regular expression. A word character is an alphabetic character, a
@@ -970,83 +1109,60 @@ C<isALNUM()> is a synonym provided for backward compatibility, even though a
word character includes more than the standard C language meaning of
alphanumeric.
See the L<top of this section|/Character classification> for an explanation of
-variants C<isWORDCHAR_A>, C<isWORDCHAR_L1>, C<isWORDCHAR_uvchr>,
-C<isWORDCHAR_utf8>, and C<isWORDCHAR_utf8_safe>. C<isWORDCHAR_LC>,
-C<isWORDCHAR_LC_uvchr>, C<isWORDCHAR_LC_utf8>, and C<isWORDCHAR_LC_utf8_safe>
-are also as described there, but additionally include the platform's native
-underscore.
-
-=for apidoc Amh|bool|isWORDCHAR_A|int ch
-=for apidoc Amh|bool|isWORDCHAR_L1|int ch
-=for apidoc Amh|bool|isWORDCHAR_uvchr|int ch
-=for apidoc Amh|bool|isWORDCHAR_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isWORDCHAR_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isWORDCHAR_LC|int ch
-=for apidoc Amh|bool|isWORDCHAR_LC_uvchr|int ch
-=for apidoc Amh|bool|isWORDCHAR_LC_utf8_safe|U8 * s| U8 *end
-=for apidoc Amh|bool|isALNUM|int ch
-=for apidoc Amh|bool|isALNUM_A|int ch
-=for apidoc Amh|bool|isALNUM_LC|int ch
-=for apidoc Amh|bool|isALNUM_LC_uvchr|int ch
-
-=for apidoc Am|bool|isXDIGIT|char ch
+the variants.
+C<isWORDCHAR_A>, C<isWORDCHAR_L1>, C<isWORDCHAR_uvchr>,
+C<isWORDCHAR_LC>, C<isWORDCHAR_LC_uvchr>, C<isWORDCHAR_LC_utf8>, and
+C<isWORDCHAR_LC_utf8_safe> are also as described there, but additionally
+include the platform's native underscore.
+
+=for apidoc Am|bool|isXDIGIT|UV ch
+=for apidoc_item ||isXDIGIT_A|UV ch
+=for apidoc_item ||isXDIGIT_L1|UV ch
+=for apidoc_item ||isXDIGIT_uvchr|UV ch
+=for apidoc_item ||isXDIGIT_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isXDIGIT_utf8|U8 * s|U8 * end
+=for apidoc_item ||isXDIGIT_LC|UV ch
+=for apidoc_item ||isXDIGIT_LC_uvchr|UV ch
+=for apidoc_item ||isXDIGIT_LC_utf8_safe|U8 * s| U8 *end
Returns a boolean indicating whether the specified character is a hexadecimal
digit. In the ASCII range these are C<[0-9A-Fa-f]>. Variants C<isXDIGIT_A()>
and C<isXDIGIT_L1()> are identical to C<isXDIGIT()>.
See the L<top of this section|/Character classification> for an explanation of
-variants
-C<isXDIGIT_uvchr>, C<isXDIGIT_utf8>, C<isXDIGIT_utf8_safe>, C<isXDIGIT_LC>,
-C<isXDIGIT_LC_uvchr>, C<isXDIGIT_LC_utf8>, and C<isXDIGIT_LC_utf8_safe>.
-
-=for apidoc Amh|bool|isXDIGIT_A|int ch
-=for apidoc Amh|bool|isXDIGIT_L1|int ch
-=for apidoc Amh|bool|isXDIGIT_uvchr|int ch
-=for apidoc Amh|bool|isXDIGIT_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isXDIGIT_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isXDIGIT_LC|int ch
-=for apidoc Amh|bool|isXDIGIT_LC_uvchr|int ch
-=for apidoc Amh|bool|isXDIGIT_LC_utf8_safe|U8 * s| U8 *end
-
-=for apidoc Am|bool|isIDFIRST|char ch
+the variants.
+
+=for apidoc Am|bool|isIDFIRST|UV ch
+=for apidoc_item ||isIDFIRST_A|UV ch
+=for apidoc_item ||isIDFIRST_L1|UV ch
+=for apidoc_item ||isIDFIRST_uvchr|UV ch
+=for apidoc_item ||isIDFIRST_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isIDFIRST_utf8|U8 * s|U8 * end
+=for apidoc_item ||isIDFIRST_LC|UV ch
+=for apidoc_item ||isIDFIRST_LC_uvchr|UV ch
+=for apidoc_item ||isIDFIRST_LC_utf8_safe|U8 * s| U8 *end
Returns a boolean indicating whether the specified character can be the first
character of an identifier. This is very close to, but not quite the same as
the official Unicode property C<XID_Start>. The difference is that this
returns true only if the input character also matches L</isWORDCHAR>.
See the L<top of this section|/Character classification> for an explanation of
-variants
-C<isIDFIRST_A>, C<isIDFIRST_L1>, C<isIDFIRST_uvchr>, C<isIDFIRST_utf8>,
-C<isIDFIRST_utf8_safe>, C<isIDFIRST_LC>, C<isIDFIRST_LC_uvchr>,
-C<isIDFIRST_LC_utf8>, and C<isIDFIRST_LC_utf8_safe>.
-
-=for apidoc Amh|bool|isIDFIRST_A|int ch
-=for apidoc Amh|bool|isIDFIRST_L1|int ch
-=for apidoc Amh|bool|isIDFIRST_uvchr|int ch
-=for apidoc Amh|bool|isIDFIRST_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isIDFIRST_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isIDFIRST_LC|int ch
-=for apidoc Amh|bool|isIDFIRST_LC_uvchr|int ch
-=for apidoc Amh|bool|isIDFIRST_LC_utf8_safe|U8 * s| U8 *end
-
-=for apidoc Am|bool|isIDCONT|char ch
+the variants.
+
+=for apidoc Am|bool|isIDCONT|UV ch
+=for apidoc_item ||isIDCONT_A|UV ch
+=for apidoc_item ||isIDCONT_L1|UV ch
+=for apidoc_item ||isIDCONT_uvchr|UV ch
+=for apidoc_item ||isIDCONT_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isIDCONT_utf8|U8 * s|U8 * end
+=for apidoc_item ||isIDCONT_LC|UV ch
+=for apidoc_item ||isIDCONT_LC_uvchr|UV ch
+=for apidoc_item ||isIDCONT_LC_utf8_safe|U8 * s| U8 *end
Returns a boolean indicating whether the specified character can be the
second or succeeding character of an identifier. This is very close to, but
not quite the same as the official Unicode property C<XID_Continue>. The
difference is that this returns true only if the input character also matches
L</isWORDCHAR>. See the L<top of this section|/Character classification> for
-an explanation of variants C<isIDCONT_A>, C<isIDCONT_L1>, C<isIDCONT_uvchr>,
-C<isIDCONT_utf8>, C<isIDCONT_utf8_safe>, C<isIDCONT_LC>, C<isIDCONT_LC_uvchr>,
-C<isIDCONT_LC_utf8>, and C<isIDCONT_LC_utf8_safe>.
-
-=for apidoc Amh|bool|isIDCONT_A|int ch
-=for apidoc Amh|bool|isIDCONT_L1|int ch
-=for apidoc Amh|bool|isIDCONT_uvchr|int ch
-=for apidoc Amh|bool|isIDCONT_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isIDCONT_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isIDCONT_LC|int ch
-=for apidoc Amh|bool|isIDCONT_LC_uvchr|int ch
-=for apidoc Amh|bool|isIDCONT_LC_utf8_safe|U8 * s| U8 *end
+an explanation of the variants.
-=head1 Miscellaneous Functions
+=for apidoc_section $numeric
=for apidoc Am|U8|READ_XDIGIT|char str*
Returns the value of an ASCII-range hex digit and advances the string pointer.
@@ -1081,6 +1197,7 @@ The first code point of the uppercased version is returned
changing>, that there may be more.)
=for apidoc Am|UV|toUPPER_utf8|U8* p|U8* e|U8* s|STRLEN* lenp
+=for apidoc_item toUPPER_utf8_safe
Converts the first UTF-8 encoded character in the sequence starting at C<p> and
extending no further than S<C<e - 1>> to its uppercase version, and
stores that in UTF-8 in C<s>, and its length in bytes in C<lenp>. Note
@@ -1097,8 +1214,7 @@ the UTF-8 for the input character is malformed in some way, the program may
croak, or the function may return the REPLACEMENT CHARACTER, at the discretion
of the implementation, and subject to change in future releases.
-=for apidoc Am|UV|toUPPER_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
-Same as L</toUPPER_utf8>.
+C<toUPPER_utf8_safe> is now just a different spelling of plain C<toUPPER_utf8>
=for apidoc Am|U8|toFOLD|U8 ch
Converts the specified character to foldcase. If the input is anything but an
@@ -1118,6 +1234,7 @@ The first code point of the foldcased version is returned
changing>, that there may be more).
=for apidoc Am|UV|toFOLD_utf8|U8* p|U8* e|U8* s|STRLEN* lenp
+=for apidoc_item toFOLD_utf8_safe
Converts the first UTF-8 encoded character in the sequence starting at C<p> and
extending no further than S<C<e - 1>> to its foldcase version, and
stores that in UTF-8 in C<s>, and its length in bytes in C<lenp>. Note
@@ -1135,51 +1252,64 @@ input character is malformed in some way, the program may croak, or the
function may return the REPLACEMENT CHARACTER, at the discretion of the
implementation, and subject to change in future releases.
-=for apidoc Am|UV|toFOLD_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
-Same as L</toFOLD_utf8>.
-
-=for apidoc Am|U8|toLOWER|U8 ch
-Converts the specified character to lowercase. If the input is anything but an
-ASCII uppercase character, that input character itself is returned. Variant
-C<toLOWER_A> is equivalent.
-
-=for apidoc Am|U8|toLOWER_L1|U8 ch
-Converts the specified Latin1 character to lowercase. The results are
-undefined if the input doesn't fit in a byte.
-
-=for apidoc Am|U8|toLOWER_LC|U8 ch
-Converts the specified character to lowercase using the current locale's rules,
-if possible; otherwise returns the input character itself.
-
-=for apidoc Am|UV|toLOWER_uvchr|UV cp|U8* s|STRLEN* lenp
-Converts the code point C<cp> to its lowercase version, and
-stores that in UTF-8 in C<s>, and its length in bytes in C<lenp>. The code
-point is interpreted as native if less than 256; otherwise as Unicode. Note
-that the buffer pointed to by C<s> needs to be at least C<UTF8_MAXBYTES_CASE+1>
-bytes since the lowercase version may be longer than the original character.
-
-The first code point of the lowercased version is returned
-(but note, as explained at L<the top of this section|/Character case
-changing>, that there may be more).
-
-=for apidoc Am|UV|toLOWER_utf8|U8* p|U8* e|U8* s|STRLEN* lenp
-Converts the first UTF-8 encoded character in the sequence starting at C<p> and
-extending no further than S<C<e - 1>> to its lowercase version, and
-stores that in UTF-8 in C<s>, and its length in bytes in C<lenp>. Note
-that the buffer pointed to by C<s> needs to be at least C<UTF8_MAXBYTES_CASE+1>
-bytes since the lowercase version may be longer than the original character.
-
-The first code point of the lowercased version is returned
-(but note, as explained at L<the top of this section|/Character case
-changing>, that there may be more).
-It will not attempt to read beyond S<C<e - 1>>, provided that the constraint
-S<C<s E<lt> e>> is true (this is asserted for in C<-DDEBUGGING> builds). If
-the UTF-8 for the input character is malformed in some way, the program may
-croak, or the function may return the REPLACEMENT CHARACTER, at the discretion
-of the implementation, and subject to change in future releases.
-
-=for apidoc Am|UV|toLOWER_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
-Same as L</toLOWER_utf8>.
+C<toFOLD_utf8_safe> is now just a different spelling of plain C<toFOLD_utf8>
+
+=for apidoc Am|UV|toLOWER|UV cp
+=for apidoc_item |UV|toLOWER_A|UV cp
+=for apidoc_item |UV|toLOWER_L1|UV cp
+=for apidoc_item |UV|toLOWER_LATIN1|UV cp
+=for apidoc_item |UV|toLOWER_LC|UV cp
+=for apidoc_item |UV|toLOWER_uvchr|UV cp|U8* s|STRLEN* lenp
+=for apidoc_item |UV|toLOWER_utf8|U8* p|U8* e|U8* s|STRLEN* lenp
+=for apidoc_item |UV|toLOWER_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
+
+These all return the lowercase of a character. The differences are what domain
+they operate on, and whether the input is specified as a code point (those
+forms with a C<cp> parameter) or as a UTF-8 string (the others). In the latter
+case, the code point to use is the first one in the buffer of UTF-8 encoded
+code points, delineated by the arguments S<C<p .. e - 1>>.
+
+C<toLOWER> and C<toLOWER_A> are synonyms of each other. They return the
+lowercase of any uppercase ASCII-range code point. All other inputs are
+returned unchanged. Since these are macros, the input type may be any integral
+one, and the output will occupy the same number of bits as the input.
+
+C<toLOWER_L1> and C<toLOWER_LATIN1> are synonyms of each other. They behave
+identically as C<toLOWER> for ASCII-range input. But additionally will return
+the lowercase of any uppercase code point in the entire 0..255 range, assuming
+a Latin-1 encoding (or the EBCDIC equivalent on such platforms).
+
+C<toLOWER_LC> returns the lowercase of the input code point according to the
+rules of the current POSIX locale. Input code points outside the range 0..255
+are returned unchanged.
+
+C<toLOWER_uvchr> returns the lowercase of any Unicode code point. The return
+value is identical to that of C<toLOWER_L1> for input code points in the 0..255
+range. The lowercase of the vast majority of Unicode code points is the same
+as the code point itself. For these, and for code points above the legal
+Unicode maximum, this returns the input code point unchanged. It additionally
+stores the UTF-8 of the result into the buffer beginning at C<s>, and its
+length in bytes into C<*lenp>. The caller must have made C<s> large enough to
+contain at least C<UTF8_MAXBYTES_CASE+1> bytes to avoid possible overflow.
+
+NOTE: the lowercase of a code point may be more than one code point. The
+return value of this function is only the first of these. The entire lowercase
+is returned in C<s>. To determine if the result is more than a single code
+point, you can do something like this:
+
+ uc = toLOWER_uvchr(cp, s, &len);
+ if (len > UTF8SKIP(s)) { is multiple code points }
+ else { is a single code point }
+
+C<toLOWER_utf8> and C<toLOWER_utf8_safe> are synonyms of each other. The only
+difference between these and C<toLOWER_uvchr> is that the source for these is
+encoded in UTF-8, instead of being a code point. It is passed as a buffer
+starting at C<p>, with C<e> pointing to one byte beyond its end. The C<p>
+buffer may certainly contain more than one code point; but only the first one
+(up through S<C<e - 1>>) is examined. If the UTF-8 for the input character is
+malformed in some way, the program may croak, or the function may return the
+REPLACEMENT CHARACTER, at the discretion of the implementation, and subject to
+change in future releases.
=for apidoc Am|U8|toTITLE|U8 ch
Converts the specified character to titlecase. If the input is anything but an
@@ -1200,7 +1330,8 @@ The first code point of the titlecased version is returned
changing>, that there may be more).
=for apidoc Am|UV|toTITLE_utf8|U8* p|U8* e|U8* s|STRLEN* lenp
-Converts the first UTF-8 encoded character in the sequence starting at C<p> and
+=for apidoc_item toTITLE_utf8_safe
+Convert the first UTF-8 encoded character in the sequence starting at C<p> and
extending no further than S<C<e - 1>> to its titlecase version, and
stores that in UTF-8 in C<s>, and its length in bytes in C<lenp>. Note
that the buffer pointed to by C<s> needs to be at least C<UTF8_MAXBYTES_CASE+1>
@@ -1217,8 +1348,7 @@ input character is malformed in some way, the program may croak, or the
function may return the REPLACEMENT CHARACTER, at the discretion of the
implementation, and subject to change in future releases.
-=for apidoc Am|UV|toTITLE_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
-Same as L</toTITLE_utf8>.
+C<toTITLE_utf8_safe> is now just a different spelling of plain C<toTITLE_utf8>
=cut
@@ -1233,10 +1363,11 @@ patched there. The file as of this writing is cpan/Devel-PPPort/parts/inc/misc
/*
void below because that's the best fit, and works for Devel::PPPort
-=for apidoc AmnU|void|WIDEST_UTYPE
+=for apidoc_section $integer
+=for apidoc AyT||WIDEST_UTYPE
Yields the widest unsigned integer type on the platform, currently either
-C<U32> or C<64>. This can be used in declarations such as
+C<U32> or C<U64>. This can be used in declarations such as
WIDEST_UTYPE my_uv;
@@ -1278,18 +1409,33 @@ or casts
* needed. (The NV casts stop any warnings about comparison always being true
* if called with an unsigned. The cast preserves the sign, which is all we
* care about.) */
-#define withinCOUNT(c, l, n) (__ASSERT_((NV) (l) >= 0) \
- __ASSERT_((NV) (n) >= 0) \
- (((WIDEST_UTYPE) (((c)) - ((l) | 0))) <= (((WIDEST_UTYPE) ((n) | 0)))))
+#define withinCOUNT(c, l, n) (__ASSERT_((NV) (l) >= 0) \
+ __ASSERT_((NV) (n) >= 0) \
+ withinCOUNT_KNOWN_VALID_((c), (l), (n)))
+
+/* For internal use only, this can be used in places where it is known that the
+ * parameters to withinCOUNT() are valid, to avoid the asserts. For example,
+ * inRANGE() below, calls this several times, but does all the necessary
+ * asserts itself, once. The reason that this is necessary is that the
+ * duplicate asserts were exceeding the internal limits of some compilers */
+#define withinCOUNT_KNOWN_VALID_(c, l, n) \
+ (((WIDEST_UTYPE) (((c)) - ((l) | 0))) <= (((WIDEST_UTYPE) ((n) | 0))))
/* Returns true if c is in the range l..u, where 'l' is non-negative
* Written this way so that after optimization, only one conditional test is
* needed. */
-#define inRANGE(c, l, u) (__ASSERT_((u) >= (l)) \
- ( (sizeof(c) == sizeof(U8)) ? withinCOUNT(((U8) (c)), (l), ((u) - (l))) \
- : (sizeof(c) == sizeof(U32)) ? withinCOUNT(((U32) (c)), (l), ((u) - (l))) \
- : (__ASSERT_(sizeof(c) == sizeof(WIDEST_UTYPE)) \
- withinCOUNT(((WIDEST_UTYPE) (c)), (l), ((u) - (l))))))
+#define inRANGE(c, l, u) (__ASSERT_((NV) (l) >= 0) __ASSERT_((u) >= (l)) \
+ ( (sizeof(c) == sizeof(U8)) ? inRANGE_helper_(U8, (c), (l), ((u))) \
+ : (sizeof(c) == sizeof(U16)) ? inRANGE_helper_(U16,(c), (l), ((u))) \
+ : (sizeof(c) == sizeof(U32)) ? inRANGE_helper_(U32,(c), (l), ((u))) \
+ : (__ASSERT_(sizeof(c) == sizeof(WIDEST_UTYPE)) \
+ inRANGE_helper_(WIDEST_UTYPE,(c), (l), ((u))))))
+
+/* For internal use, this is used by machine-generated code which generates
+ * known valid calls, with a known sizeof(). This avoids the extra code and
+ * asserts that were exceeding internal limits of some compilers. */
+#define inRANGE_helper_(cast, c, l, u) \
+ withinCOUNT_KNOWN_VALID_(((cast) (c)), (l), ((u) - (l)))
#ifdef EBCDIC
# ifndef _ALL_SOURCE
@@ -1372,7 +1518,7 @@ or casts
/* This next group is only used on EBCDIC platforms, so theoretically could be
* shared with something entirely different that's only on ASCII platforms */
# define _CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE 31
-/* Unused: 24-30
+/* Unused: 26-30
* If more bits are needed, one could add a second word for non-64bit
* QUAD_IS_INT systems, using some #ifdefs to distinguish between having a 2nd
* word or not. The IS_IN_SOME_FOLD bit is the most easily expendable, as it
@@ -1487,16 +1633,21 @@ END_EXTERN_C
# endif
/* Participates in a single-character fold with a character above 255 */
-# define _HAS_NONLATIN1_SIMPLE_FOLD_CLOSURE_ONLY_FOR_USE_BY_REGCOMP_DOT_C_AND_REGEXEC_DOT_C(c) ((! cBOOL(FITS_IN_8_BITS(c))) || (PL_charclass[(U8) (c)] & _CC_mask(_CC_NONLATIN1_SIMPLE_FOLD)))
+# if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)
+# define HAS_NONLATIN1_SIMPLE_FOLD_CLOSURE(c) \
+ (( ! cBOOL(FITS_IN_8_BITS(c))) \
+ || (PL_charclass[(U8) (c)] & _CC_mask(_CC_NONLATIN1_SIMPLE_FOLD)))
+
+# define IS_NON_FINAL_FOLD(c) _generic_isCC(c, _CC_NON_FINAL_FOLD)
+# define IS_IN_SOME_FOLD_L1(c) _generic_isCC(c, _CC_IS_IN_SOME_FOLD)
+# endif
/* Like the above, but also can be part of a multi-char fold */
-# define _HAS_NONLATIN1_FOLD_CLOSURE_ONLY_FOR_USE_BY_REGCOMP_DOT_C_AND_REGEXEC_DOT_C(c) ((! cBOOL(FITS_IN_8_BITS(c))) || (PL_charclass[(U8) (c)] & _CC_mask(_CC_NONLATIN1_FOLD)))
+# define HAS_NONLATIN1_FOLD_CLOSURE(c) \
+ ( (! cBOOL(FITS_IN_8_BITS(c))) \
+ || (PL_charclass[(U8) (c)] & _CC_mask(_CC_NONLATIN1_FOLD)))
# define _isQUOTEMETA(c) _generic_isCC(c, _CC_QUOTEMETA)
-# define _IS_NON_FINAL_FOLD_ONLY_FOR_USE_BY_REGCOMP_DOT_C(c) \
- _generic_isCC(c, _CC_NON_FINAL_FOLD)
-# define _IS_IN_SOME_FOLD_ONLY_FOR_USE_BY_REGCOMP_DOT_C(c) \
- _generic_isCC(c, _CC_IS_IN_SOME_FOLD)
/* is c a control character for which we have a mnemonic? */
# if defined(PERL_CORE) || defined(PERL_EXT)
@@ -2278,22 +2429,29 @@ END_EXTERN_C
: (LATIN1_TO_NATIVE(((U8) (c)) ^ 64)))))
#endif
-/* Line numbers are unsigned, 32 bits. */
+/*
+=for apidoc Ay||line_t
+The typedef to use to declare variables that are to hold line numbers.
+
+=cut
+
+ Line numbers are unsigned, 32 bits.
+*/
typedef U32 line_t;
#define NOLINE ((line_t) 4294967295UL) /* = FFFFFFFF */
/* Helpful alias for version prescan */
#define is_LAX_VERSION(a,b) \
- (a != Perl_prescan_version(aTHX_ a, FALSE, b, NULL, NULL, NULL, NULL))
+ (a != Perl_prescan_version(aTHX_ a, FALSE, b, NULL, NULL, NULL, NULL))
#define is_STRICT_VERSION(a,b) \
- (a != Perl_prescan_version(aTHX_ a, TRUE, b, NULL, NULL, NULL, NULL))
+ (a != Perl_prescan_version(aTHX_ a, TRUE, b, NULL, NULL, NULL, NULL))
#define BADVERSION(a,b,c) \
- if (b) { \
- *b = c; \
- } \
- return a;
+ if (b) { \
+ *b = c; \
+ } \
+ return a;
/* Converts a character KNOWN to represent a hexadecimal digit (0-9, A-F, or
* a-f) to its numeric value without using any branches. The input is
@@ -2318,7 +2476,7 @@ typedef U32 line_t;
#define OCTAL_VALUE(c) (__ASSERT_(isOCTAL(c)) (7 & (c)))
/* Efficiently returns a boolean as to if two native characters are equivalent
- * case-insenstively. At least one of the characters must be one of [A-Za-z];
+ * case-insensitively. At least one of the characters must be one of [A-Za-z];
* the ALPHA in the name is to remind you of that. This is asserted() in
* DEBUGGING builds. Because [A-Za-z] are invariant under UTF-8, this macro
* works (on valid input) for both non- and UTF-8-encoded bytes.
@@ -2337,7 +2495,7 @@ typedef U32 line_t;
#define isALPHA_FOLD_NE(c1, c2) (! isALPHA_FOLD_EQ((c1), (c2)))
/*
-=head1 Memory Management
+=for apidoc_section $memory
=for apidoc Am|void|Newx|void* ptr|int nitems|type
The XSUB-writer's interface to the C C<malloc> function.
@@ -2378,6 +2536,7 @@ The XSUB-writer's interface to the C C<free> function.
This should B<ONLY> be used on memory obtained using L</"Newx"> and friends.
+=for apidoc_section $string
=for apidoc Am|void|Move|void* src|void* dest|int nitems|type
The XSUB-writer's interface to the C C<memmove> function. The C<src> is the
source, C<dest> is the destination, C<nitems> is the number of items, and
@@ -2410,7 +2569,8 @@ Like C<Zero> but returns dest. Useful
for encouraging compilers to tail-call
optimise.
-=for apidoc Am|void|StructCopy|type *src|type *dest|type
+=for apidoc_section $utility
+=for apidoc Amu|void|StructCopy|type *src|type *dest|type
This is an architecture-independent macro to copy one structure to another.
=for apidoc Am|void|PoisonWith|void* dest|int nitems|type|U8 byte
@@ -2479,17 +2639,17 @@ PoisonWith(0xEF) for catching access to freed memory.
MEM_SIZE_MAX/sizeof(t)) > MEM_SIZE_MAX/sizeof(t))
# define MEM_WRAP_CHECK(n,t) \
- (void)(UNLIKELY(_MEM_WRAP_WILL_WRAP(n,t)) \
+ (void)(UNLIKELY(_MEM_WRAP_WILL_WRAP(n,t)) \
&& (croak_memory_wrap(),0))
# define MEM_WRAP_CHECK_1(n,t,a) \
- (void)(UNLIKELY(_MEM_WRAP_WILL_WRAP(n,t)) \
- && (Perl_croak_nocontext("%s",(a)),0))
+ (void)(UNLIKELY(_MEM_WRAP_WILL_WRAP(n,t)) \
+ && (Perl_croak_nocontext("%s",(a)),0))
/* "a" arg must be a string literal */
# define MEM_WRAP_CHECK_s(n,t,a) \
- (void)(UNLIKELY(_MEM_WRAP_WILL_WRAP(n,t)) \
- && (Perl_croak_nocontext("" a ""),0))
+ (void)(UNLIKELY(_MEM_WRAP_WILL_WRAP(n,t)) \
+ && (Perl_croak_nocontext("" a ""),0))
#define MEM_WRAP_CHECK_(n,t) MEM_WRAP_CHECK(n,t),
@@ -2584,9 +2744,9 @@ void Perl_mem_log_del_sv(const SV *sv, const char *filename, const int linenumbe
#endif
#define Renew(v,n,t) \
- (v = (MEM_WRAP_CHECK_(n,t) (t*)MEM_LOG_REALLOC(n,t,v,saferealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t))))))
+ (v = (MEM_WRAP_CHECK_(n,t) (t*)MEM_LOG_REALLOC(n,t,v,saferealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t))))))
#define Renewc(v,n,t,c) \
- (v = (MEM_WRAP_CHECK_(n,t) (c*)MEM_LOG_REALLOC(n,t,v,saferealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t))))))
+ (v = (MEM_WRAP_CHECK_(n,t) (c*)MEM_LOG_REALLOC(n,t,v,saferealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t))))))
#ifdef PERL_POISON
#define Safefree(d) \
@@ -2621,10 +2781,11 @@ void Perl_mem_log_del_sv(const SV *sv, const char *filename, const int linenumbe
# define PERL_POISON_EXPR(x)
#endif
+/* Shallow copy */
#define StructCopy(s,d,t) (*((t*)(d)) = *((t*)(s)))
/*
-=head1 Handy Values
+=for apidoc_section $utility
=for apidoc Am|STRLEN|C_ARRAY_LENGTH|void *a
diff --git a/Master/tlpkg/tlperl/lib/CORE/hv.h b/Master/tlpkg/tlperl/lib/CORE/hv.h
index 607152c840b..119cf8c9662 100644
--- a/Master/tlpkg/tlperl/lib/CORE/hv.h
+++ b/Master/tlpkg/tlperl/lib/CORE/hv.h
@@ -36,8 +36,8 @@ struct he {
HE *hent_next; /* next entry in chain */
HEK *hent_hek; /* hash key */
union {
- SV *hent_val; /* scalar value that was hashed */
- Size_t hent_refcount; /* references for this shared hash key */
+ SV *hent_val; /* scalar value that was hashed */
+ Size_t hent_refcount; /* references for this shared hash key */
} he_valu;
};
@@ -140,22 +140,16 @@ struct xpvhv {
};
/*
-=head1 Hash Manipulation Functions
-
=for apidoc AmnU||HEf_SVKEY
This flag, used in the length slot of hash entries and magic structures,
specifies the structure contains an C<SV*> pointer where a C<char*> pointer
is to be expected. (For information only--not to be used).
-=head1 Handy Values
-
=for apidoc ADmnU||Nullhv
Null HV pointer.
(deprecated - use C<(HV *)NULL> instead)
-=head1 Hash Manipulation Functions
-
=for apidoc Am|char*|HvNAME|HV* stash
Returns the package name of a stash, or C<NULL> if C<stash> isn't a stash.
See C<L</SvSTASH>>, C<L</CvSTASH>>.
@@ -163,6 +157,10 @@ See C<L</SvSTASH>>, C<L</CvSTASH>>.
=for apidoc Am|STRLEN|HvNAMELEN|HV *stash
Returns the length of the stash's name.
+Disfavored forms of HvNAME and HvNAMELEN; suppress mention of them
+=for apidoc Cmh|char*|HvNAME_get|HV* stash
+=for apidoc Amh|I32|HvNAMELEN_get|HV* stash
+
=for apidoc Am|unsigned char|HvNAMEUTF8|HV *stash
Returns true if the name is in UTF-8 encoding.
@@ -306,16 +304,16 @@ See L</hv_fill>.
)
/* This macro may go away without notice. */
#define HvNAME_HEK(hv) \
- (SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name ? HvNAME_HEK_NN(hv) : NULL)
+ (SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name ? HvNAME_HEK_NN(hv) : NULL)
#define HvNAME_get(hv) \
- ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvNAME_HEK_NN(hv)) \
- ? HEK_KEY(HvNAME_HEK_NN(hv)) : NULL)
+ ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvNAME_HEK_NN(hv)) \
+ ? HEK_KEY(HvNAME_HEK_NN(hv)) : NULL)
#define HvNAMELEN_get(hv) \
- ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvNAME_HEK_NN(hv)) \
- ? HEK_LEN(HvNAME_HEK_NN(hv)) : 0)
+ ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvNAME_HEK_NN(hv)) \
+ ? HEK_LEN(HvNAME_HEK_NN(hv)) : 0)
#define HvNAMEUTF8(hv) \
- ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvNAME_HEK_NN(hv)) \
- ? HEK_UTF8(HvNAME_HEK_NN(hv)) : 0)
+ ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvNAME_HEK_NN(hv)) \
+ ? HEK_UTF8(HvNAME_HEK_NN(hv)) : 0)
#define HvENAME_HEK_NN(hv) \
( \
HvAUX(hv)->xhv_name_count > 0 ? HvAUX(hv)->xhv_name_u.xhvnameu_names[0] : \
@@ -324,16 +322,16 @@ See L</hv_fill>.
HvAUX(hv)->xhv_name_u.xhvnameu_name \
)
#define HvENAME_HEK(hv) \
- (SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name ? HvENAME_HEK_NN(hv) : NULL)
+ (SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name ? HvENAME_HEK_NN(hv) : NULL)
#define HvENAME_get(hv) \
((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvAUX(hv)->xhv_name_count != -1) \
- ? HEK_KEY(HvENAME_HEK_NN(hv)) : NULL)
+ ? HEK_KEY(HvENAME_HEK_NN(hv)) : NULL)
#define HvENAMELEN_get(hv) \
((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvAUX(hv)->xhv_name_count != -1) \
- ? HEK_LEN(HvENAME_HEK_NN(hv)) : 0)
+ ? HEK_LEN(HvENAME_HEK_NN(hv)) : 0)
#define HvENAMEUTF8(hv) \
((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvAUX(hv)->xhv_name_count != -1) \
- ? HEK_UTF8(HvENAME_HEK_NN(hv)) : 0)
+ ? HEK_UTF8(HvENAME_HEK_NN(hv)) : 0)
/* the number of keys (including any placeholders) - NOT PART OF THE API */
#define XHvTOTALKEYS(xhv) ((xhv)->xhv_keys)
@@ -385,24 +383,24 @@ See L</hv_fill>.
#define HeVAL(he) (he)->he_valu.hent_val
#define HeHASH(he) HEK_HASH(HeKEY_hek(he))
#define HePV(he,lp) ((HeKLEN(he) == HEf_SVKEY) ? \
- SvPV(HeKEY_sv(he),lp) : \
- ((lp = HeKLEN(he)), HeKEY(he)))
+ SvPV(HeKEY_sv(he),lp) : \
+ ((lp = HeKLEN(he)), HeKEY(he)))
#define HeUTF8(he) ((HeKLEN(he) == HEf_SVKEY) ? \
- SvUTF8(HeKEY_sv(he)) : \
- (U32)HeKUTF8(he))
+ SvUTF8(HeKEY_sv(he)) : \
+ (U32)HeKUTF8(he))
#define HeSVKEY(he) ((HeKEY(he) && \
- HeKLEN(he) == HEf_SVKEY) ? \
- HeKEY_sv(he) : NULL)
+ HeKLEN(he) == HEf_SVKEY) ? \
+ HeKEY_sv(he) : NULL)
#define HeSVKEY_force(he) (HeKEY(he) ? \
- ((HeKLEN(he) == HEf_SVKEY) ? \
- HeKEY_sv(he) : \
- newSVpvn_flags(HeKEY(he), \
+ ((HeKLEN(he) == HEf_SVKEY) ? \
+ HeKEY_sv(he) : \
+ newSVpvn_flags(HeKEY(he), \
HeKLEN(he), \
SVs_TEMP | \
( HeKUTF8(he) ? SVf_UTF8 : 0 ))) : \
- &PL_sv_undef)
+ &PL_sv_undef)
#define HeSVKEY_set(he,sv) ((HeKLEN(he) = HEf_SVKEY), (HeKEY_sv(he) = sv))
#ifndef PERL_CORE
@@ -422,8 +420,8 @@ See L</hv_fill>.
#define HVhek_PLACEHOLD 0x200 /* Internal flag to create placeholder.
* (may change, but Storable is a core module) */
#define HVhek_KEYCANONICAL 0x400 /* Internal flag - key is in canonical form.
- If the string is UTF-8, it cannot be
- converted to bytes. */
+ If the string is UTF-8, it cannot be
+ converted to bytes. */
#define HVhek_MASK 0xFF
#define HVhek_ENABLEHVKFLAGS (HVhek_MASK & ~(HVhek_UNSHARED))
@@ -444,9 +442,9 @@ See L</hv_fill>.
#else
# define MALLOC_OVERHEAD 16
# define PERL_HV_ARRAY_ALLOC_BYTES(size) \
- (((size) < 64) \
- ? (size) * sizeof(HE*) \
- : (size) * sizeof(HE*) * 2 - MALLOC_OVERHEAD)
+ (((size) < 64) \
+ ? (size) * sizeof(HE*) \
+ : (size) * sizeof(HE*) * 2 - MALLOC_OVERHEAD)
#endif
/* Flags for hv_iternext_flags. */
@@ -461,33 +459,33 @@ See L</hv_fill>.
#define share_hek_hek(hek) \
(++(((struct shared_he *)(((char *)hek) \
- - STRUCT_OFFSET(struct shared_he, \
- shared_he_hek))) \
- ->shared_he_he.he_valu.hent_refcount), \
+ - STRUCT_OFFSET(struct shared_he, \
+ shared_he_hek))) \
+ ->shared_he_he.he_valu.hent_refcount), \
hek)
#define hv_store_ent(hv, keysv, val, hash) \
((HE *) hv_common((hv), (keysv), NULL, 0, 0, HV_FETCH_ISSTORE, \
- (val), (hash)))
+ (val), (hash)))
#define hv_exists_ent(hv, keysv, hash) \
cBOOL(hv_common((hv), (keysv), NULL, 0, 0, HV_FETCH_ISEXISTS, 0, (hash)))
#define hv_fetch_ent(hv, keysv, lval, hash) \
((HE *) hv_common((hv), (keysv), NULL, 0, 0, \
- ((lval) ? HV_FETCH_LVALUE : 0), NULL, (hash)))
+ ((lval) ? HV_FETCH_LVALUE : 0), NULL, (hash)))
#define hv_delete_ent(hv, key, flags, hash) \
(MUTABLE_SV(hv_common((hv), (key), NULL, 0, 0, (flags) | HV_DELETE, \
- NULL, (hash))))
+ NULL, (hash))))
#define hv_store_flags(hv, key, klen, val, hash, flags) \
((SV**) hv_common((hv), NULL, (key), (klen), (flags), \
- (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), (val), \
- (hash)))
+ (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), (val), \
+ (hash)))
#define hv_store(hv, key, klen, val, hash) \
((SV**) hv_common_key_len((hv), (key), (klen), \
- (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), \
- (val), (hash)))
+ (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), \
+ (val), (hash)))
@@ -496,12 +494,12 @@ See L</hv_fill>.
#define hv_fetch(hv, key, klen, lval) \
((SV**) hv_common_key_len((hv), (key), (klen), (lval) \
- ? (HV_FETCH_JUST_SV | HV_FETCH_LVALUE) \
- : HV_FETCH_JUST_SV, NULL, 0))
+ ? (HV_FETCH_JUST_SV | HV_FETCH_LVALUE) \
+ : HV_FETCH_JUST_SV, NULL, 0))
#define hv_delete(hv, key, klen, flags) \
(MUTABLE_SV(hv_common_key_len((hv), (key), (klen), \
- (flags) | HV_DELETE, NULL, 0)))
+ (flags) | HV_DELETE, NULL, 0)))
/* Provide 's' suffix subs for constant strings (and avoid needing to count
* chars). See STR_WITH_LEN in handy.h - because these are macros we cant use
@@ -524,17 +522,17 @@ See L</hv_fill>.
#ifdef PERL_CORE
# define hv_storehek(hv, hek, val) \
hv_common((hv), NULL, HEK_KEY(hek), HEK_LEN(hek), HEK_UTF8(hek), \
- HV_FETCH_ISSTORE|HV_FETCH_JUST_SV, (val), HEK_HASH(hek))
+ HV_FETCH_ISSTORE|HV_FETCH_JUST_SV, (val), HEK_HASH(hek))
# define hv_fetchhek(hv, hek, lval) \
((SV **) \
hv_common((hv), NULL, HEK_KEY(hek), HEK_LEN(hek), HEK_UTF8(hek), \
- (lval) \
- ? (HV_FETCH_JUST_SV | HV_FETCH_LVALUE) \
- : HV_FETCH_JUST_SV, \
- NULL, HEK_HASH(hek)))
+ (lval) \
+ ? (HV_FETCH_JUST_SV | HV_FETCH_LVALUE) \
+ : HV_FETCH_JUST_SV, \
+ NULL, HEK_HASH(hek)))
# define hv_deletehek(hv, hek, flags) \
hv_common((hv), NULL, HEK_KEY(hek), HEK_LEN(hek), HEK_UTF8(hek), \
- (flags)|HV_DELETE, NULL, HEK_HASH(hek))
+ (flags)|HV_DELETE, NULL, HEK_HASH(hek))
#endif
/* This refcounted he structure is used for storing the hints used for lexical
@@ -547,9 +545,7 @@ struct refcounted_he;
/* flags for the refcounted_he API */
#define REFCOUNTED_HE_KEY_UTF8 0x00000001
-#ifdef PERL_CORE
-# define REFCOUNTED_HE_EXISTS 0x00000002
-#endif
+#define REFCOUNTED_HE_EXISTS 0x00000002
#ifdef PERL_CORE
@@ -563,10 +559,10 @@ struct refcounted_he {
HEK *refcounted_he_hek; /* hint key */
#endif
union {
- IV refcounted_he_u_iv;
- UV refcounted_he_u_uv;
- STRLEN refcounted_he_u_len;
- void *refcounted_he_u_ptr; /* Might be useful in future */
+ IV refcounted_he_u_iv;
+ UV refcounted_he_u_uv;
+ STRLEN refcounted_he_u_len;
+ void *refcounted_he_u_ptr; /* Might be useful in future */
} refcounted_he_val;
U32 refcounted_he_refcnt; /* reference count */
/* First byte is flags. Then NUL-terminated value. Then for ithreads,
@@ -612,9 +608,9 @@ instead of a string/length pair, and no precomputed hash.
#ifdef USE_ITHREADS
/* A big expression to find the key offset */
#define REF_HE_KEY(chain) \
- ((((chain->refcounted_he_data[0] & 0x60) == 0x40) \
- ? chain->refcounted_he_val.refcounted_he_u_len + 1 : 0) \
- + 1 + chain->refcounted_he_data)
+ ((((chain->refcounted_he_data[0] & 0x60) == 0x40) \
+ ? chain->refcounted_he_val.refcounted_he_u_len + 1 : 0) \
+ + 1 + chain->refcounted_he_data)
#endif
# ifdef USE_ITHREADS
diff --git a/Master/tlpkg/tlperl/lib/CORE/hv_func.h b/Master/tlpkg/tlperl/lib/CORE/hv_func.h
index 3e2d2be80b7..7d8b01b0d4e 100755
--- a/Master/tlpkg/tlperl/lib/CORE/hv_func.h
+++ b/Master/tlpkg/tlperl/lib/CORE/hv_func.h
@@ -6,18 +6,17 @@
* If USE_HASH_SEED is defined, hash randomisation is done by default
* (see also perl.c:perl_parse() and S_init_tls_and_interp() and util.c:get_hash_seed())
*/
-#ifndef PERL_SEEN_HV_FUNC_H /* compile once */
-#define PERL_SEEN_HV_FUNC_H
+#ifndef PERL_SEEN_HV_FUNC_H_ /* compile once */
+#define PERL_SEEN_HV_FUNC_H_
#include "hv_macro.h"
#if !( 0 \
|| defined(PERL_HASH_FUNC_SIPHASH) \
|| defined(PERL_HASH_FUNC_SIPHASH13) \
- || defined(PERL_HASH_FUNC_STADTX) \
|| defined(PERL_HASH_FUNC_ZAPHOD32) \
)
# ifdef CAN64BITHASH
-# define PERL_HASH_FUNC_STADTX
+# define PERL_HASH_FUNC_SIPHASH13
# else
# define PERL_HASH_FUNC_ZAPHOD32
# endif
@@ -36,27 +35,26 @@
#if defined(PERL_HASH_FUNC_SIPHASH)
# define __PERL_HASH_FUNC "SIPHASH_2_4"
-# define __PERL_HASH_SEED_BYTES 16
-# define __PERL_HASH_STATE_BYTES 32
+# define __PERL_HASH_WORD_TYPE U64
+# define __PERL_HASH_WORD_SIZE sizeof(__PERL_HASH_WORD_TYPE)
+# define __PERL_HASH_SEED_BYTES (__PERL_HASH_WORD_SIZE * 2)
+# define __PERL_HASH_STATE_BYTES (__PERL_HASH_WORD_SIZE * 4)
# define __PERL_HASH_SEED_STATE(seed,state) S_perl_siphash_seed_state(seed,state)
# define __PERL_HASH_WITH_STATE(state,str,len) S_perl_hash_siphash_2_4_with_state((state),(U8*)(str),(len))
#elif defined(PERL_HASH_FUNC_SIPHASH13)
# define __PERL_HASH_FUNC "SIPHASH_1_3"
-# define __PERL_HASH_SEED_BYTES 16
-# define __PERL_HASH_STATE_BYTES 32
+# define __PERL_HASH_WORD_TYPE U64
+# define __PERL_HASH_WORD_SIZE sizeof(__PERL_HASH_WORD_TYPE)
+# define __PERL_HASH_SEED_BYTES (__PERL_HASH_WORD_SIZE * 2)
+# define __PERL_HASH_STATE_BYTES (__PERL_HASH_WORD_SIZE * 4)
# define __PERL_HASH_SEED_STATE(seed,state) S_perl_siphash_seed_state(seed,state)
# define __PERL_HASH_WITH_STATE(state,str,len) S_perl_hash_siphash_1_3_with_state((state),(U8*)(str),(len))
-#elif defined(PERL_HASH_FUNC_STADTX)
-# define __PERL_HASH_FUNC "STADTX"
-# define __PERL_HASH_SEED_BYTES 16
-# define __PERL_HASH_STATE_BYTES 32
-# define __PERL_HASH_SEED_STATE(seed,state) stadtx_seed_state(seed,state)
-# define __PERL_HASH_WITH_STATE(state,str,len) (U32)stadtx_hash_with_state((state),(U8*)(str),(len))
-# include "stadtx_hash.h"
#elif defined(PERL_HASH_FUNC_ZAPHOD32)
# define __PERL_HASH_FUNC "ZAPHOD32"
-# define __PERL_HASH_SEED_BYTES 12
-# define __PERL_HASH_STATE_BYTES 12
+# define __PERL_HASH_WORD_TYPE U32
+# define __PERL_HASH_WORD_SIZE sizeof(__PERL_HASH_WORD_TYPE)
+# define __PERL_HASH_SEED_BYTES (__PERL_HASH_WORD_SIZE * 3)
+# define __PERL_HASH_STATE_BYTES (__PERL_HASH_WORD_SIZE * 3)
# define __PERL_HASH_SEED_STATE(seed,state) zaphod32_seed_state(seed,state)
# define __PERL_HASH_WITH_STATE(state,str,len) (U32)zaphod32_hash_with_state((state),(U8*)(str),(len))
# include "zaphod32_hash.h"
@@ -72,6 +70,17 @@
#error "__PERL_HASH_FUNC not defined"
#endif
+/* Some siphash static functions are needed by XS::APItest even when
+ siphash isn't the current hash. For SipHash builds this needs to
+ be before the S_perl_hash_with_seed() definition.
+*/
+#include "perl_siphash.h"
+
+#define __PERL_HASH_SEED_roundup(x, y) ( ( ( (x) + ( (y) - 1 ) ) / (y) ) * (y) )
+#define _PERL_HASH_SEED_roundup(x) __PERL_HASH_SEED_roundup(x,__PERL_HASH_WORD_SIZE)
+
+#define PL_hash_seed ((U8 *)PL_hash_seed_w)
+#define PL_hash_state ((U8 *)PL_hash_state_w)
#if PERL_HASH_USE_SBOX32_ALSO != 1
# define _PERL_HASH_FUNC __PERL_HASH_FUNC
@@ -82,8 +91,8 @@
#else
#define _PERL_HASH_FUNC "SBOX32_WITH_" __PERL_HASH_FUNC
-
-#define _PERL_HASH_SEED_BYTES ( __PERL_HASH_SEED_BYTES + (int)( 3 * sizeof(U32) ) )
+/* note the 3 in the below code comes from the fact the seed to initialize the SBOX is 96 bits */
+#define _PERL_HASH_SEED_BYTES ( __PERL_HASH_SEED_BYTES + (int)( 3 * sizeof(U32)) )
#define _PERL_HASH_STATE_BYTES \
( __PERL_HASH_STATE_BYTES + ( ( 1 + ( 256 * SBOX32_MAX_LEN ) ) * sizeof(U32) ) )
@@ -100,23 +109,19 @@
#endif
-PERL_STATIC_INLINE
-U32 S_perl_hash_with_seed(const U8 * const seed, const U8 * const str, const STRLEN len)
-{
- U8 state[_PERL_HASH_STATE_BYTES];
- _PERL_HASH_SEED_STATE(seed,state);
- return _PERL_HASH_WITH_STATE(state,str,len);
-}
-
#define PERL_HASH_WITH_SEED(seed,hash,str,len) \
(hash) = S_perl_hash_with_seed((const U8 *) seed, (const U8 *) str,len)
#define PERL_HASH_WITH_STATE(state,hash,str,len) \
(hash) = _PERL_HASH_WITH_STATE((state),(U8*)(str),(len))
+
#define PERL_HASH_SEED_STATE(seed,state) _PERL_HASH_SEED_STATE(seed,state)
-#define PERL_HASH_SEED_BYTES _PERL_HASH_SEED_BYTES
-#define PERL_HASH_STATE_BYTES _PERL_HASH_STATE_BYTES
+#define PERL_HASH_SEED_BYTES _PERL_HASH_SEED_roundup(_PERL_HASH_SEED_BYTES)
+#define PERL_HASH_STATE_BYTES _PERL_HASH_SEED_roundup(_PERL_HASH_STATE_BYTES)
#define PERL_HASH_FUNC _PERL_HASH_FUNC
+#define PERL_HASH_SEED_WORDS (PERL_HASH_SEED_BYTES/__PERL_HASH_WORD_SIZE)
+#define PERL_HASH_STATE_WORDS (PERL_HASH_STATE_BYTES/__PERL_HASH_WORD_SIZE)
+
#ifdef PERL_USE_SINGLE_CHAR_HASH_CACHE
#define PERL_HASH(state,str,len) \
(hash) = ((len) < 2 ? ( (len) == 0 ? PL_hash_chars[256] : PL_hash_chars[(U8)(str)[0]] ) \
@@ -155,135 +160,13 @@ U32 S_perl_hash_with_seed(const U8 * const seed, const U8 * const str, const STR
#define PERL_HASH_INTERNAL(hash,str,len) PERL_HASH(hash,str,len)
#endif
-/* This is SipHash by Jean-Philippe Aumasson and Daniel J. Bernstein.
- * The authors claim it is relatively secure compared to the alternatives
- * and that performance wise it is a suitable hash for languages like Perl.
- * See:
- *
- * https://www.131002.net/siphash/
- *
- * This implementation seems to perform slightly slower than one-at-a-time for
- * short keys, but degrades slower for longer keys. Murmur Hash outperforms it
- * regardless of keys size.
- *
- * It is 64 bit only.
- */
-
-#ifdef CAN64BITHASH
-
-#define SIPROUND \
- STMT_START { \
- v0 += v1; v1=ROTL64(v1,13); v1 ^= v0; v0=ROTL64(v0,32); \
- v2 += v3; v3=ROTL64(v3,16); v3 ^= v2; \
- v0 += v3; v3=ROTL64(v3,21); v3 ^= v0; \
- v2 += v1; v1=ROTL64(v1,17); v1 ^= v2; v2=ROTL64(v2,32); \
- } STMT_END
-
-#define SIPHASH_SEED_STATE(key,v0,v1,v2,v3) \
-do { \
- v0 = v2 = U8TO64_LE(key + 0); \
- v1 = v3 = U8TO64_LE(key + 8); \
- /* "somepseudorandomlygeneratedbytes" */ \
- v0 ^= UINT64_C(0x736f6d6570736575); \
- v1 ^= UINT64_C(0x646f72616e646f6d); \
- v2 ^= UINT64_C(0x6c7967656e657261); \
- v3 ^= UINT64_C(0x7465646279746573); \
-} while (0)
-
-PERL_STATIC_INLINE
-void S_perl_siphash_seed_state(const unsigned char * const seed_buf, unsigned char * state_buf) {
- U64 *v= (U64*) state_buf;
- SIPHASH_SEED_STATE(seed_buf, v[0],v[1],v[2],v[3]);
-}
-
-#define PERL_SIPHASH_FNC(FNC,SIP_ROUNDS,SIP_FINAL_ROUNDS) \
-PERL_STATIC_INLINE U64 \
-FNC ## _with_state_64 \
- (const unsigned char * const state, const unsigned char *in, const STRLEN inlen) \
-{ \
- const int left = inlen & 7; \
- const U8 *end = in + inlen - left; \
- \
- U64 b = ( ( U64 )(inlen) ) << 56; \
- U64 m; \
- U64 v0 = U8TO64_LE(state); \
- U64 v1 = U8TO64_LE(state+8); \
- U64 v2 = U8TO64_LE(state+16); \
- U64 v3 = U8TO64_LE(state+24); \
- \
- for ( ; in != end; in += 8 ) \
- { \
- m = U8TO64_LE( in ); \
- v3 ^= m; \
- \
- SIP_ROUNDS; \
- \
- v0 ^= m; \
- } \
- \
- switch( left ) \
- { \
- case 7: b |= ( ( U64 )in[ 6] ) << 48; /*FALLTHROUGH*/ \
- case 6: b |= ( ( U64 )in[ 5] ) << 40; /*FALLTHROUGH*/ \
- case 5: b |= ( ( U64 )in[ 4] ) << 32; /*FALLTHROUGH*/ \
- case 4: b |= ( ( U64 )in[ 3] ) << 24; /*FALLTHROUGH*/ \
- case 3: b |= ( ( U64 )in[ 2] ) << 16; /*FALLTHROUGH*/ \
- case 2: b |= ( ( U64 )in[ 1] ) << 8; /*FALLTHROUGH*/ \
- case 1: b |= ( ( U64 )in[ 0] ); break; \
- case 0: break; \
- } \
- \
- v3 ^= b; \
- \
- SIP_ROUNDS; \
- \
- v0 ^= b; \
- \
- v2 ^= 0xff; \
- \
- SIP_FINAL_ROUNDS \
- \
- b = v0 ^ v1 ^ v2 ^ v3; \
- return b; \
-} \
- \
-PERL_STATIC_INLINE U32 \
-FNC ## _with_state \
- (const unsigned char * const state, const unsigned char *in, const STRLEN inlen) \
-{ \
- union { \
- U64 h64; \
- U32 h32[2]; \
- } h; \
- h.h64= FNC ## _with_state_64(state,in,inlen); \
- return h.h32[0] ^ h.h32[1]; \
-} \
- \
- \
-PERL_STATIC_INLINE U32 \
-FNC (const unsigned char * const seed, const unsigned char *in, const STRLEN inlen) \
-{ \
- U64 state[4]; \
- SIPHASH_SEED_STATE(seed,state[0],state[1],state[2],state[3]); \
- return FNC ## _with_state((U8*)state,in,inlen); \
+PERL_STATIC_INLINE U32
+S_perl_hash_with_seed(const U8 * seed, const U8 *str, STRLEN len) {
+ __PERL_HASH_WORD_TYPE state[PERL_HASH_STATE_WORDS];
+ _PERL_HASH_SEED_STATE(seed,(U8*)state);
+ return _PERL_HASH_WITH_STATE((U8*)state,str,len);
}
-
-PERL_SIPHASH_FNC(
- S_perl_hash_siphash_1_3
- ,SIPROUND;
- ,SIPROUND;SIPROUND;SIPROUND;
-)
-
-PERL_SIPHASH_FNC(
- S_perl_hash_siphash_2_4
- ,SIPROUND;SIPROUND;
- ,SIPROUND;SIPROUND;SIPROUND;SIPROUND;
-)
-
-#endif /* defined(CAN64BITHASH) */
-
-
#endif /*compile once*/
/*
diff --git a/Master/tlpkg/tlperl/lib/CORE/hv_macro.h b/Master/tlpkg/tlperl/lib/CORE/hv_macro.h
index fa8c3123c53..a494ad1f556 100644
--- a/Master/tlpkg/tlperl/lib/CORE/hv_macro.h
+++ b/Master/tlpkg/tlperl/lib/CORE/hv_macro.h
@@ -1,5 +1,5 @@
-#ifndef PERL_SEEN_HV_MACRO_H /* compile once */
-#define PERL_SEEN_HV_MACRO_H
+#ifndef PERL_SEEN_HV_MACRO_H_ /* compile once */
+#define PERL_SEEN_HV_MACRO_H_
#if IVSIZE == 8
#define CAN64BITHASH
diff --git a/Master/tlpkg/tlperl/lib/CORE/inline.h b/Master/tlpkg/tlperl/lib/CORE/inline.h
index bb0cdb0e542..bbf27da6f58 100755
--- a/Master/tlpkg/tlperl/lib/CORE/inline.h
+++ b/Master/tlpkg/tlperl/lib/CORE/inline.h
@@ -39,25 +39,41 @@ SOFTWARE.
/* ------------------------------- av.h ------------------------------- */
-PERL_STATIC_INLINE SSize_t
-Perl_av_top_index(pTHX_ AV *av)
+/*
+=for apidoc_section $AV
+=for apidoc av_count
+Returns the number of elements in the array C<av>. This is the true length of
+the array, including any undefined elements. It is always the same as
+S<C<av_top_index(av) + 1>>.
+
+=cut
+*/
+PERL_STATIC_INLINE Size_t
+Perl_av_count(pTHX_ AV *av)
{
- PERL_ARGS_ASSERT_AV_TOP_INDEX;
+ PERL_ARGS_ASSERT_AV_COUNT;
assert(SvTYPE(av) == SVt_PVAV);
- return AvFILL(av);
+ return AvFILL(av) + 1;
}
/* ------------------------------- cv.h ------------------------------- */
+/*
+=for apidoc_section $CV
+=for apidoc CvGV
+Returns the GV associated with the CV C<sv>, reifying it if necessary.
+
+=cut
+*/
PERL_STATIC_INLINE GV *
Perl_CvGV(pTHX_ CV *sv)
{
PERL_ARGS_ASSERT_CVGV;
return CvNAMED(sv)
- ? Perl_cvgv_from_hek(aTHX_ sv)
- : ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_gv_u.xcv_gv;
+ ? Perl_cvgv_from_hek(aTHX_ sv)
+ : ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_gv_u.xcv_gv;
}
PERL_STATIC_INLINE I32 *
@@ -89,13 +105,13 @@ S_strip_spaces(pTHX_ const char * orig, STRLEN * const len)
tmpsv = newSVpvn_flags(orig, *len, SVs_TEMP);
tmps = SvPVX(tmpsv);
while ((*len)--) {
- if (!isSPACE(*orig))
- *tmps++ = *orig;
- orig++;
+ if (!isSPACE(*orig))
+ *tmps++ = *orig;
+ orig++;
}
*tmps = '\0';
*len = tmps - SvPVX(tmpsv);
- return SvPVX(tmpsv);
+ return SvPVX(tmpsv);
}
#endif
@@ -109,12 +125,12 @@ S_MgBYTEPOS(pTHX_ MAGIC *mg, SV *sv, const char *s, STRLEN len)
assert(mg->mg_type == PERL_MAGIC_regex_global);
assert(mg->mg_len != -1);
if (mg->mg_flags & MGf_BYTES || !DO_UTF8(sv))
- return (STRLEN)mg->mg_len;
+ return (STRLEN)mg->mg_len;
else {
- const STRLEN pos = (STRLEN)mg->mg_len;
- /* Without this check, we may read past the end of the buffer: */
- if (pos > sv_or_pv_len_utf8(sv, s, len)) return len+1;
- return sv_or_pv_pos_u2b(sv, s, pos, NULL);
+ const STRLEN pos = (STRLEN)mg->mg_len;
+ /* Without this check, we may read past the end of the buffer: */
+ if (pos > sv_or_pv_len_utf8(sv, s, len)) return len+1;
+ return sv_or_pv_pos_u2b(sv, s, pos, NULL);
}
}
#endif
@@ -131,27 +147,27 @@ S_PadnameIN_SCOPE(const PADNAME * const pn, const U32 seq)
* This is complicated by the fact that PL_cop_seqmax
* may have wrapped around at some point */
if (COP_SEQ_RANGE_LOW(pn) == PERL_PADSEQ_INTRO)
- return FALSE; /* not yet introduced */
+ return FALSE; /* not yet introduced */
if (COP_SEQ_RANGE_HIGH(pn) == PERL_PADSEQ_INTRO) {
/* in compiling scope */
- if (
- (seq > COP_SEQ_RANGE_LOW(pn))
- ? (seq - COP_SEQ_RANGE_LOW(pn) < (U32_MAX >> 1))
- : (COP_SEQ_RANGE_LOW(pn) - seq > (U32_MAX >> 1))
- )
- return TRUE;
+ if (
+ (seq > COP_SEQ_RANGE_LOW(pn))
+ ? (seq - COP_SEQ_RANGE_LOW(pn) < (U32_MAX >> 1))
+ : (COP_SEQ_RANGE_LOW(pn) - seq > (U32_MAX >> 1))
+ )
+ return TRUE;
}
else if (
- (COP_SEQ_RANGE_LOW(pn) > COP_SEQ_RANGE_HIGH(pn))
- ?
- ( seq > COP_SEQ_RANGE_LOW(pn)
- || seq <= COP_SEQ_RANGE_HIGH(pn))
+ (COP_SEQ_RANGE_LOW(pn) > COP_SEQ_RANGE_HIGH(pn))
+ ?
+ ( seq > COP_SEQ_RANGE_LOW(pn)
+ || seq <= COP_SEQ_RANGE_HIGH(pn))
- : ( seq > COP_SEQ_RANGE_LOW(pn)
- && seq <= COP_SEQ_RANGE_HIGH(pn))
+ : ( seq > COP_SEQ_RANGE_LOW(pn)
+ && seq <= COP_SEQ_RANGE_HIGH(pn))
)
- return TRUE;
+ return TRUE;
return FALSE;
}
#endif
@@ -162,9 +178,9 @@ PERL_STATIC_INLINE I32
Perl_TOPMARK(pTHX)
{
DEBUG_s(DEBUG_v(PerlIO_printf(Perl_debug_log,
- "MARK top %p %" IVdf "\n",
- PL_markstack_ptr,
- (IV)*PL_markstack_ptr)));
+ "MARK top %p %" IVdf "\n",
+ PL_markstack_ptr,
+ (IV)*PL_markstack_ptr)));
return *PL_markstack_ptr;
}
@@ -172,9 +188,9 @@ PERL_STATIC_INLINE I32
Perl_POPMARK(pTHX)
{
DEBUG_s(DEBUG_v(PerlIO_printf(Perl_debug_log,
- "MARK pop %p %" IVdf "\n",
- (PL_markstack_ptr-1),
- (IV)*(PL_markstack_ptr-1))));
+ "MARK pop %p %" IVdf "\n",
+ (PL_markstack_ptr-1),
+ (IV)*(PL_markstack_ptr-1))));
assert((PL_markstack_ptr > PL_markstack) || !"MARK underflow");
return *PL_markstack_ptr--;
}
@@ -196,18 +212,67 @@ Perl_ReANY(const REGEXP * const re)
/* ------------------------------- sv.h ------------------------------- */
PERL_STATIC_INLINE bool
-Perl_SvTRUE(pTHX_ SV *sv) {
- if (!LIKELY(sv))
+Perl_SvTRUE(pTHX_ SV *sv)
+{
+ PERL_ARGS_ASSERT_SVTRUE;
+
+ if (UNLIKELY(sv == NULL))
return FALSE;
SvGETMAGIC(sv);
return SvTRUE_nomg_NN(sv);
}
+PERL_STATIC_INLINE bool
+Perl_SvTRUE_nomg(pTHX_ SV *sv)
+{
+ PERL_ARGS_ASSERT_SVTRUE_NOMG;
+
+ if (UNLIKELY(sv == NULL))
+ return FALSE;
+ return SvTRUE_nomg_NN(sv);
+}
+
+PERL_STATIC_INLINE bool
+Perl_SvTRUE_NN(pTHX_ SV *sv)
+{
+ PERL_ARGS_ASSERT_SVTRUE_NN;
+
+ SvGETMAGIC(sv);
+ return SvTRUE_nomg_NN(sv);
+}
+
+PERL_STATIC_INLINE bool
+Perl_SvTRUE_common(pTHX_ SV * sv, const bool sv_2bool_is_fallback)
+{
+ PERL_ARGS_ASSERT_SVTRUE_COMMON;
+
+ if (UNLIKELY(SvIMMORTAL_INTERP(sv)))
+ return SvIMMORTAL_TRUE(sv);
+
+ if (! SvOK(sv))
+ return FALSE;
+
+ if (SvPOK(sv))
+ return SvPVXtrue(sv);
+
+ if (SvIOK(sv))
+ return SvIVX(sv) != 0; /* casts to bool */
+
+ if (SvROK(sv) && !(SvOBJECT(SvRV(sv)) && HvAMAGIC(SvSTASH(SvRV(sv)))))
+ return TRUE;
+
+ if (sv_2bool_is_fallback)
+ return sv_2bool_nomg(sv);
+
+ return isGV_with_GP(sv);
+}
+
+
PERL_STATIC_INLINE SV *
Perl_SvREFCNT_inc(SV *sv)
{
if (LIKELY(sv != NULL))
- SvREFCNT(sv)++;
+ SvREFCNT(sv)++;
return sv;
}
PERL_STATIC_INLINE SV *
@@ -222,17 +287,17 @@ PERL_STATIC_INLINE void
Perl_SvREFCNT_inc_void(SV *sv)
{
if (LIKELY(sv != NULL))
- SvREFCNT(sv)++;
+ SvREFCNT(sv)++;
}
PERL_STATIC_INLINE void
Perl_SvREFCNT_dec(pTHX_ SV *sv)
{
if (LIKELY(sv != NULL)) {
- U32 rc = SvREFCNT(sv);
- if (LIKELY(rc > 1))
- SvREFCNT(sv) = rc - 1;
- else
- Perl_sv_free2(aTHX_ sv, rc);
+ U32 rc = SvREFCNT(sv);
+ if (LIKELY(rc > 1))
+ SvREFCNT(sv) = rc - 1;
+ else
+ Perl_sv_free2(aTHX_ sv, rc);
}
}
@@ -244,9 +309,9 @@ Perl_SvREFCNT_dec_NN(pTHX_ SV *sv)
PERL_ARGS_ASSERT_SVREFCNT_DEC_NN;
if (LIKELY(rc > 1))
- SvREFCNT(sv) = rc - 1;
+ SvREFCNT(sv) = rc - 1;
else
- Perl_sv_free2(aTHX_ sv, rc);
+ Perl_sv_free2(aTHX_ sv, rc);
}
PERL_STATIC_INLINE void
@@ -263,7 +328,7 @@ Perl_SvAMAGIC_off(SV *sv)
PERL_ARGS_ASSERT_SVAMAGIC_OFF;
if (SvROK(sv) && SvOBJECT(SvRV(sv)))
- HvAMAGIC_off(SvSTASH(SvRV(sv)));
+ HvAMAGIC_off(SvSTASH(SvRV(sv)));
}
PERL_STATIC_INLINE U32
@@ -284,9 +349,9 @@ S_sv_or_pv_pos_u2b(pTHX_ SV *sv, const char *pv, STRLEN pos, STRLEN *lenp)
{
PERL_ARGS_ASSERT_SV_OR_PV_POS_U2B;
if (SvGAMAGIC(sv)) {
- U8 *hopped = utf8_hop((U8 *)pv, pos);
- if (lenp) *lenp = (STRLEN)(utf8_hop(hopped, *lenp) - hopped);
- return (STRLEN)(hopped - (U8 *)pv);
+ U8 *hopped = utf8_hop((U8 *)pv, pos);
+ if (lenp) *lenp = (STRLEN)(utf8_hop(hopped, *lenp) - hopped);
+ return (STRLEN)(hopped - (U8 *)pv);
}
return sv_pos_u2b_flags(sv,pos,lenp,SV_CONST_RETURN);
}
@@ -295,7 +360,7 @@ S_sv_or_pv_pos_u2b(pTHX_ SV *sv, const char *pv, STRLEN pos, STRLEN *lenp)
/* ------------------------------- utf8.h ------------------------------- */
/*
-=head1 Unicode Support
+=for apidoc_section $unicode
*/
PERL_STATIC_INLINE void
@@ -340,7 +405,7 @@ Perl_valid_utf8_to_uvchr(const U8 *s, STRLEN *retlen)
/* An invariant is trivially returned */
if (expectlen == 1) {
- return uv;
+ return uv;
}
/* Remove the leading bits that indicate the number of bytes, leaving just
@@ -502,7 +567,7 @@ Perl_is_utf8_invariant_string_loc(const U8* const s, STRLEN len, const U8 ** ep)
/* Process per-byte */
while (x < send) {
- if (! UTF8_IS_INVARIANT(*x)) {
+ if (! UTF8_IS_INVARIANT(*x)) {
if (ep) {
*ep = x;
}
@@ -677,7 +742,7 @@ S_variant_under_utf8_count(const U8* const s, const U8* const e)
/* Process per-byte */
while (x < e) {
- if (! UTF8_IS_INVARIANT(*x)) {
+ if (! UTF8_IS_INVARIANT(*x)) {
count++;
}
@@ -1506,15 +1571,15 @@ Perl_utf8_hop(const U8 *s, SSize_t off)
* In other words: in Perl UTF-8 is not just for Unicode. */
if (off >= 0) {
- while (off--)
- s += UTF8SKIP(s);
+ while (off--)
+ s += UTF8SKIP(s);
}
else {
- while (off++) {
- s--;
- while (UTF8_IS_CONTINUATION(*s))
- s--;
- }
+ while (off++) {
+ s--;
+ while (UTF8_IS_CONTINUATION(*s))
+ s--;
+ }
}
GCC_DIAG_IGNORE(-Wcast-qual)
return (U8 *)s;
@@ -1868,7 +1933,7 @@ Perl_utf8_to_uvchr_buf_helper(pTHX_ const U8 *s, const U8 *send, STRLEN *retlen)
/* ------------------------------- perl.h ----------------------------- */
/*
-=head1 Miscellaneous Functions
+=for apidoc_section $utility
=for apidoc is_safe_syscall
@@ -1954,15 +2019,17 @@ S_lossless_NV_to_IV(const NV nv, IV *ivp)
PERL_ARGS_ASSERT_LOSSLESS_NV_TO_IV;
-# if defined(Perl_isnan)
-
+# if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
+ /* Normally any comparison with a NaN returns false; if we can't rely
+ * on that behaviour, check explicitly */
if (UNLIKELY(Perl_isnan(nv))) {
return FALSE;
}
-
# endif
- if (UNLIKELY(nv < IV_MIN) || UNLIKELY(nv > IV_MAX)) {
+ /* Written this way so that with an always-false NaN comparison we
+ * return false */
+ if (!(LIKELY(nv >= (NV) IV_MIN) && LIKELY(nv < IV_MAX_P1))) {
return FALSE;
}
@@ -1976,36 +2043,6 @@ S_lossless_NV_to_IV(const NV nv, IV *ivp)
#endif
-/* ------------------ regcomp.c, toke.c ------------ */
-
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C)
-
-/*
- - regcurly - a little FSA that accepts {\d+,?\d*}
- Pulled from reg.c.
- */
-PERL_STATIC_INLINE bool
-S_regcurly(const char *s)
-{
- PERL_ARGS_ASSERT_REGCURLY;
-
- if (*s++ != '{')
- return FALSE;
- if (!isDIGIT(*s))
- return FALSE;
- while (isDIGIT(*s))
- s++;
- if (*s == ',') {
- s++;
- while (isDIGIT(*s))
- s++;
- }
-
- return *s == '}';
-}
-
-#endif
-
/* ------------------ pp.c, regcomp.c, toke.c, universal.c ------------ */
#if defined(PERL_IN_PP_C) || defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_UNIVERSAL_C)
@@ -2026,10 +2063,10 @@ S_get_regex_charset_name(const U32 flags, STRLEN* const lenp)
case REGEX_DEPENDS_CHARSET: return DEPENDS_PAT_MODS;
case REGEX_LOCALE_CHARSET: return LOCALE_PAT_MODS;
case REGEX_UNICODE_CHARSET: return UNICODE_PAT_MODS;
- case REGEX_ASCII_RESTRICTED_CHARSET: return ASCII_RESTRICT_PAT_MODS;
- case REGEX_ASCII_MORE_RESTRICTED_CHARSET:
- *lenp = 2;
- return ASCII_MORE_RESTRICT_PAT_MODS;
+ case REGEX_ASCII_RESTRICTED_CHARSET: return ASCII_RESTRICT_PAT_MODS;
+ case REGEX_ASCII_MORE_RESTRICTED_CHARSET:
+ *lenp = 2;
+ return ASCII_MORE_RESTRICT_PAT_MODS;
}
/* The NOT_REACHED; hides an assert() which has a rather complex
* definition in perl.h. */
@@ -2078,7 +2115,7 @@ Perl_gimme_V(pTHX)
return gimme;
cxix = PL_curstackinfo->si_cxsubix;
if (cxix < 0)
- return G_VOID;
+ return PL_curstackinfo->si_type == PERLSI_SORT ? G_SCALAR: G_VOID;
assert(cxstack[cxix].blk_gimme & G_WANT);
return (cxstack[cxix].blk_gimme & G_WANT);
}
@@ -2276,12 +2313,8 @@ Perl_cx_popformat(pTHX_ PERL_CONTEXT *cx)
PERL_STATIC_INLINE void
-Perl_cx_pusheval(pTHX_ PERL_CONTEXT *cx, OP *retop, SV *namesv)
+Perl_push_evalortry_common(pTHX_ PERL_CONTEXT *cx, OP *retop, SV *namesv)
{
- PERL_ARGS_ASSERT_CX_PUSHEVAL;
-
- cx->blk_eval.old_cxsubix = PL_curstackinfo->si_cxsubix;
- PL_curstackinfo->si_cxsubix= cx - PL_curstackinfo->si_cxstack;
cx->blk_eval.retop = retop;
cx->blk_eval.old_namesv = namesv;
cx->blk_eval.old_eval_root = PL_eval_root;
@@ -2294,6 +2327,29 @@ Perl_cx_pusheval(pTHX_ PERL_CONTEXT *cx, OP *retop, SV *namesv)
cx->blk_u16 = (PL_in_eval & 0x3F) | ((U16)PL_op->op_type << 7);
}
+PERL_STATIC_INLINE void
+Perl_cx_pusheval(pTHX_ PERL_CONTEXT *cx, OP *retop, SV *namesv)
+{
+ PERL_ARGS_ASSERT_CX_PUSHEVAL;
+
+ Perl_push_evalortry_common(aTHX_ cx, retop, namesv);
+
+ cx->blk_eval.old_cxsubix = PL_curstackinfo->si_cxsubix;
+ PL_curstackinfo->si_cxsubix = cx - PL_curstackinfo->si_cxstack;
+}
+
+PERL_STATIC_INLINE void
+Perl_cx_pushtry(pTHX_ PERL_CONTEXT *cx, OP *retop)
+{
+ PERL_ARGS_ASSERT_CX_PUSHTRY;
+
+ Perl_push_evalortry_common(aTHX_ cx, retop, NULL);
+
+ /* Don't actually change it, just store the current value so it's restored
+ * by the common popeval */
+ cx->blk_eval.old_cxsubix = PL_curstackinfo->si_cxsubix;
+}
+
PERL_STATIC_INLINE void
Perl_cx_popeval(pTHX_ PERL_CONTEXT *cx)
@@ -2439,7 +2495,7 @@ Perl_cx_popgiven(pTHX_ PERL_CONTEXT *cx)
/* ------------------ util.h ------------------------------------------- */
/*
-=head1 Miscellaneous Functions
+=for apidoc_section $string
=for apidoc foldEQ
@@ -2463,9 +2519,9 @@ Perl_foldEQ(const char *s1, const char *s2, I32 len)
assert(len >= 0);
while (len--) {
- if (*a != *b && *a != PL_fold[*b])
- return 0;
- a++,b++;
+ if (*a != *b && *a != PL_fold[*b])
+ return 0;
+ a++,b++;
}
return 1;
}
@@ -2486,15 +2542,16 @@ Perl_foldEQ_latin1(const char *s1, const char *s2, I32 len)
assert(len >= 0);
while (len--) {
- if (*a != *b && *a != PL_fold_latin1[*b]) {
- return 0;
- }
- a++, b++;
+ if (*a != *b && *a != PL_fold_latin1[*b]) {
+ return 0;
+ }
+ a++, b++;
}
return 1;
}
/*
+=for apidoc_section $locale
=for apidoc foldEQ_locale
Returns true if the leading C<len> bytes of the strings C<s1> and C<s2> are the
@@ -2506,7 +2563,6 @@ same case-insensitively in the current locale; false otherwise.
PERL_STATIC_INLINE I32
Perl_foldEQ_locale(const char *s1, const char *s2, I32 len)
{
- dVAR;
const U8 *a = (const U8 *)s1;
const U8 *b = (const U8 *)s2;
@@ -2515,14 +2571,15 @@ Perl_foldEQ_locale(const char *s1, const char *s2, I32 len)
assert(len >= 0);
while (len--) {
- if (*a != *b && *a != PL_fold_locale[*b])
- return 0;
- a++,b++;
+ if (*a != *b && *a != PL_fold_locale[*b])
+ return 0;
+ a++,b++;
}
return 1;
}
/*
+=for apidoc_section $string
=for apidoc my_strnlen
The C library C<strnlen> if available, or a Perl implementation of it.
@@ -2580,23 +2637,31 @@ Perl_mortal_getenv(const char * str)
{
/* This implements a (mostly) thread-safe, sequential-call-safe getenv().
*
- * It's (mostly) thread-safe because it uses a mutex to prevent
- * simultaneous access from other threads that use the same mutex, and
- * makes a copy of the result before releasing that mutex. All of the Perl
- * core uses that mutex, but, like all mutexes, everything has to cooperate
- * for it to completely work. It is possible for code from, say XS, to not
- * use this mutex, defeating the safety.
+ * It's (mostly) thread-safe because it uses a mutex to prevent other
+ * threads (that look at this mutex) from destroying the result before this
+ * routine has a chance to copy the result to a place that won't be
+ * destroyed before the caller gets a chance to handle it. That place is a
+ * mortal SV. khw chose this over SAVEFREEPV because he is under the
+ * impression that the SV will hang around longer under more circumstances
*
- * On some platforms, getenv() is not sequential-call-safe, because
- * subsequent calls destroy the static storage inside the C library
- * returned by an earlier call. The result must be copied or completely
- * acted upon before a subsequent getenv call. Those calls could come from
- * another thread. Again, making a copy while controlling the mutex
- * prevents these problems..
+ * The reason it isn't completely thread-safe is that other code could
+ * simply not pay attention to the mutex. All of the Perl core uses the
+ * mutex, but it is possible for code from, say XS, to not use this mutex,
+ * defeating the safety.
*
- * To prevent leaks, the copy is made by creating a new SV containing it,
- * mortalizing the SV, and returning the SV's string (the copy). Thus this
- * is a drop-in replacement for getenv().
+ * getenv() returns, in some implementations, a pointer to a spot in the
+ * **environ array, which could be invalidated at any time by this or
+ * another thread changing the environment. Other implementations copy the
+ * **environ value to a static buffer, returning a pointer to that. That
+ * buffer might or might not be invalidated by a getenv() call in another
+ * thread. If it does get zapped, we need an exclusive lock. Otherwise,
+ * many getenv() calls can safely be running simultaneously, so a
+ * many-reader (but no simultaneous writers) lock is ok. There is a
+ * Configure probe to see if another thread destroys the buffer, and the
+ * mutex is defined accordingly.
+ *
+ * But in all cases, using the mutex prevents these problems, as long as
+ * all code uses the same mutex..
*
* A complication is that this can be called during phases where the
* mortalization process isn't available. These are in interpreter
@@ -2616,15 +2681,152 @@ Perl_mortal_getenv(const char * str)
return getenv(str);
}
- ENV_LOCK;
+#ifdef PERL_MEM_LOG
+
+ /* A major complication arises under PERL_MEM_LOG. When that is active,
+ * every memory allocation may result in logging, depending on the value of
+ * ENV{PERL_MEM_LOG} at the moment. That means, as we create the SV for
+ * saving ENV{foo}'s value (but before saving it), the logging code will
+ * call us recursively to find out what ENV{PERL_MEM_LOG} is. Without some
+ * care that could lead to: 1) infinite recursion; or 2) deadlock (trying to
+ * lock a boolean mutex recursively); 3) destroying the getenv() static
+ * buffer; or 4) destroying the temporary created by this for the copy
+ * causes a log entry to be made which could cause a new temporary to be
+ * created, which will need to be destroyed at some point, leading to an
+ * infinite loop.
+ *
+ * The solution adopted here (after some gnashing of teeth) is to detect
+ * the recursive calls and calls from the logger, and treat them specially.
+ * Let's say we want to do getenv("foo"). We first find
+ * getenv(PERL_MEM_LOG) and save it to a fixed-length per-interpreter
+ * variable, so no temporary is required. Then we do getenv(foo}, and in
+ * the process of creating a temporary to save it, this function will be
+ * called recursively to do a getenv(PERL_MEM_LOG). On the recursed call,
+ * we detect that it is such a call and return our saved value instead of
+ * locking and doing a new getenv(). This solves all of problems 1), 2),
+ * and 3). Because all the getenv()s are done while the mutex is locked,
+ * the state cannot have changed. To solve 4), we don't create a temporary
+ * when this is called from the logging code. That code disposes of the
+ * return value while the mutex is still locked.
+ *
+ * The value of getenv(PERL_MEM_LOG) can be anything, but only initial
+ * digits and 3 particular letters are significant; the rest are ignored by
+ * the memory logging code. Thus the per-interpreter variable only needs
+ * to be large enough to save the significant information, the size of
+ * which is known at compile time. The first byte is extra, reserved for
+ * flags for our use. To protect against overflowing, only the reserved
+ * byte, as many digits as don't overflow, and the three letters are
+ * stored.
+ *
+ * The reserved byte has two bits:
+ * 0x1 if set indicates that if we get here, it is a recursive call of
+ * getenv()
+ * 0x2 if set indicates that the call is from the logging code.
+ *
+ * If the flag indicates this is a recursive call, just return the stored
+ * value of PL_mem_log; An empty value gets turned into NULL. */
+ if (strEQ(str, "PERL_MEM_LOG") && PL_mem_log[0] & 0x1) {
+ if (PL_mem_log[1] == '\0') {
+ return NULL;
+ } else {
+ return PL_mem_log + 1;
+ }
+ }
+
+#endif
+
+ GETENV_LOCK;
+
+#ifdef PERL_MEM_LOG
+
+ /* Here we are in a critical section. As explained above, we do our own
+ * getenv(PERL_MEM_LOG), saving the result safely. */
+ ret = getenv("PERL_MEM_LOG");
+ if (ret == NULL) { /* No logging active */
+
+ /* Return that immediately if called from the logging code */
+ if (PL_mem_log[0] & 0x2) {
+ GETENV_UNLOCK;
+ return NULL;
+ }
+
+ PL_mem_log[1] = '\0';
+ }
+ else {
+ char *mem_log_meat = PL_mem_log + 1; /* first byte reserved */
+
+ /* There is nothing to prevent the value of PERL_MEM_LOG from being an
+ * extremely long string. But we want only a few characters from it.
+ * PL_mem_log has been made large enough to hold just the ones we need.
+ * First the file descriptor. */
+ if (isDIGIT(*ret)) {
+ const char * s = ret;
+ if (UNLIKELY(*s == '0')) {
+
+ /* Reduce multiple leading zeros to a single one. This is to
+ * allow the caller to change what to do with leading zeros. */
+ *mem_log_meat++ = '0';
+ s++;
+ while (*s == '0') {
+ s++;
+ }
+ }
+
+ /* If the input overflows, copy just enough for the result to also
+ * overflow, plus 1 to make sure */
+ while (isDIGIT(*s) && s < ret + TYPE_DIGITS(UV) + 1) {
+ *mem_log_meat++ = *s++;
+ }
+ }
+ /* Then each of the three significant characters */
+ if (strchr(ret, 'm')) {
+ *mem_log_meat++ = 'm';
+ }
+ if (strchr(ret, 's')) {
+ *mem_log_meat++ = 's';
+ }
+ if (strchr(ret, 't')) {
+ *mem_log_meat++ = 't';
+ }
+ *mem_log_meat = '\0';
+
+ assert(mem_log_meat < PL_mem_log + sizeof(PL_mem_log));
+ }
+
+ /* If we are being called from the logger, it only needs the significant
+ * portion of PERL_MEM_LOG, and doesn't need a safe copy */
+ if (PL_mem_log[0] & 0x2) {
+ assert(strEQ(str, "PERL_MEM_LOG"));
+ GETENV_UNLOCK;
+ return PL_mem_log + 1;
+ }
+
+ /* Here is a generic getenv(). This could be a getenv("PERL_MEM_LOG") that
+ * is coming from other than the logging code, so it should be treated the
+ * same as any other getenv(), returning the full value, not just the
+ * significant part, and having its value saved. Set the flag that
+ * indicates any call to this routine will be a recursion from here */
+ PL_mem_log[0] = 0x1;
+
+#endif
+
+ /* Now get the value of the real desired variable, and save a copy */
ret = getenv(str);
if (ret != NULL) {
ret = SvPVX(sv_2mortal(newSVpv(ret, 0)));
}
- ENV_UNLOCK;
+ GETENV_UNLOCK;
+
+#ifdef PERL_MEM_LOG
+
+ /* Clear the buffer */
+ Zero(PL_mem_log, sizeof(PL_mem_log), char);
+
+#endif
+
return ret;
}
diff --git a/Master/tlpkg/tlperl/lib/CORE/intrpvar.h b/Master/tlpkg/tlperl/lib/CORE/intrpvar.h
index 23de9d9cee9..5c49d31528a 100644
--- a/Master/tlpkg/tlperl/lib/CORE/intrpvar.h
+++ b/Master/tlpkg/tlperl/lib/CORE/intrpvar.h
@@ -10,10 +10,6 @@
#include "handy.h"
-/*
-=head1 Per-Interpreter Variables
-*/
-
/* These variables are per-interpreter in threaded/multiplicity builds,
* global otherwise.
@@ -40,7 +36,7 @@ PERLVAR(I, stack_base, SV **)
PERLVAR(I, stack_max, SV **)
PERLVAR(I, savestack, ANY *) /* items that need to be restored when
- LEAVEing scopes we've ENTERed */
+ LEAVEing scopes we've ENTERed */
PERLVAR(I, savestack_ix, I32)
PERLVAR(I, savestack_max, I32)
@@ -53,13 +49,13 @@ PERLVARI(I, tmps_ix, SSize_t, -1)
PERLVARI(I, tmps_floor, SSize_t, -1)
PERLVAR(I, tmps_max, SSize_t) /* first unalloced slot in tmps stack */
-PERLVARI(I, sub_generation, U32, 1) /* incr to invalidate method cache */
-
PERLVAR(I, markstack, I32 *) /* stack_sp locations we're
- remembering */
+ remembering */
PERLVAR(I, markstack_ptr, I32 *)
PERLVAR(I, markstack_max, I32 *)
+PERLVARI(I, sub_generation, U32, 1) /* incr to invalidate method cache */
+
#ifdef PERL_HASH_RANDOMIZE_KEYS
#ifdef USE_PERL_PERTURB_KEYS
PERLVARI(I, hash_rand_bits_enabled, U8, 1) /* used to randomize hash stuff 0 == no-random, 1 == random, 2 == determinsitic */
@@ -94,24 +90,17 @@ PERLVARI(I, tainted, bool, FALSE) /* using variables controlled by $< */
PERLVAR(I, delaymagic, U16) /* ($<,$>) = ... */
/*
-=for apidoc Amn|GV *|PL_defgv
-
-The GV representing C<*_>. Useful for access to C<$_>.
-
-=cut
-*/
-
-PERLVAR(I, localizing, U8) /* are we processing a local() list? */
-PERLVAR(I, in_eval, U8) /* trap "fatal" errors? */
-PERLVAR(I, defgv, GV *) /* the *_ glob */
-/*
-
+=for apidoc_section $warning
=for apidoc mn|U8|PL_dowarn
The C variable that roughly corresponds to Perl's C<$^W> warning variable.
However, C<$^W> is treated as a boolean, whereas C<PL_dowarn> is a
collection of flag bits.
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
=cut
*/
@@ -126,10 +115,30 @@ PERLVARI(I, utf8cache, I8, PERL___I) /* Is the utf8 caching code enabled? */
#undef PERL___I
/*
+=for apidoc Amn|GV *|PL_defgv
+
+The GV representing C<*_>. Useful for access to C<$_>.
+
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
+=cut
+*/
+
+PERLVAR(I, localizing, U8) /* are we processing a local() list? */
+PERLVAR(I, in_eval, U8) /* trap "fatal" errors? */
+PERLVAR(I, defgv, GV *) /* the *_ glob */
+
+/*
=for apidoc Amn|HV*|PL_curstash
The stash for the package code will be compiled into.
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
=cut
*/
@@ -143,6 +152,10 @@ PERLVAR(I, curstash, HV *) /* symbol table for current package */
The currently active COP (control op) roughly representing the current
statement in the source.
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
=cut
*/
@@ -150,7 +163,7 @@ PERLVAR(I, curcop, COP *)
PERLVAR(I, curstack, AV *) /* THE STACK */
PERLVAR(I, curstackinfo, PERL_SI *) /* current stack + context */
PERLVAR(I, mainstack, AV *) /* the stack when nothing funny is
- happening */
+ happening */
/* memory management */
PERLVAR(I, sv_count, IV) /* how many SV* are currently allocated */
@@ -171,16 +184,18 @@ PERLVAR(I, regmatch_state, regmatch_state *)
PERLVAR(I, comppad, PAD *) /* storage for lexically scoped temporaries */
/*
+=for apidoc_section $SV
=for apidoc Amn|SV|PL_sv_undef
-This is the C<undef> SV. Always refer to this as C<&PL_sv_undef>.
+This is the C<undef> SV. It is readonly. Always refer to this as
+C<&PL_sv_undef>.
=for apidoc Amn|SV|PL_sv_no
-This is the C<false> SV. See C<L</PL_sv_yes>>. Always refer to this as
-C<&PL_sv_no>.
+This is the C<false> SV. It is readonly. See C<L</PL_sv_yes>>. Always refer
+to this as C<&PL_sv_no>.
=for apidoc Amn|SV|PL_sv_yes
-This is the C<true> SV. See C<L</PL_sv_no>>. Always refer to this as
-C<&PL_sv_yes>.
+This is the C<true> SV. It is readonly. See C<L</PL_sv_no>>. Always refer to
+this as C<&PL_sv_yes>.
=for apidoc Amn|SV|PL_sv_zero
This readonly SV has a zero numeric value and a C<"0"> string value. It's
@@ -204,7 +219,19 @@ PERLVARA(I, sv_immortals, 4, SV)
PERLVAR(I, padname_undef, PADNAME)
PERLVAR(I, padname_const, PADNAME)
-PERLVAR(I, Sv, SV *) /* used to hold temporary values */
+
+/*
+=for apidoc Cmn||PL_Sv
+
+A scratch pad SV for whatever temporary use you need. Chiefly used as a
+fallback by macros on platforms where L<perlapi/PERL_USE_GCC_BRACE_GROUPS>> is
+unavailable, and which would otherwise evaluate their SV parameter more than
+once.
+
+=cut
+*/
+PERLVAR(I, Sv, SV *)
+
PERLVAR(I, parser, yy_parser *) /* current parser state */
PERLVAR(I, stashcache, HV *) /* Cache to speed up S_method_common */
@@ -222,7 +249,7 @@ C<SvPV_nolen> macro.
*/
PERLVAR(I, na, STRLEN) /* for use in SvPV when length is
- Not Applicable */
+ Not Applicable */
/* stat stuff */
PERLVAR(I, statcache, Stat_t) /* _ */
@@ -230,18 +257,31 @@ PERLVAR(I, statgv, GV *)
PERLVARI(I, statname, SV *, NULL)
/*
+=for apidoc_section $io
=for apidoc mn|SV*|PL_rs
The input record separator - C<$/> in Perl space.
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
=for apidoc mn|GV*|PL_last_in_gv
The GV which was last used for a filehandle input operation. (C<< <FH> >>)
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
=for apidoc mn|GV*|PL_ofsgv
The glob containing the output field separator - C<*,> in Perl space.
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
=cut
*/
@@ -278,9 +318,10 @@ PERLVAR(I, efloatbuf, char *)
PERLVAR(I, efloatsize, STRLEN)
PERLVARI(I, dumpindent, U16, 4) /* number of blanks per dump
- indentation level */
+ indentation level */
/*
+=for apidoc_section $embedding
=for apidoc Amn|U8|PL_exit_flags
Contains flags controlling perl's behaviour on exit():
@@ -313,6 +354,10 @@ Set by the L<perlfunc/exit> operator.
=for apidoc Amnh||PERL_EXIT_DESTRUCT_END
=for apidoc Amnh||PERL_EXIT_WARN
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
=cut
*/
@@ -334,6 +379,7 @@ PERLVARA(I, locale_utf8ness, 256, char)
PERLVARA(I, colors,6, char *) /* values from PERL_RE_COLORS env var */
/*
+=for apidoc_section $optree_construction
=for apidoc Amn|peep_t|PL_peepp
Pointer to the per-subroutine peephole optimiser. This is a function
@@ -351,6 +397,10 @@ If the new code wishes to operate on ops throughout the subroutine's
structure, rather than just at the top level, it is likely to be more
convenient to wrap the L</PL_rpeepp> hook.
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
=cut
*/
@@ -375,6 +425,10 @@ If the new code wishes to operate only on ops at a subroutine's top level,
rather than throughout the structure, it is likely to be more convenient
to wrap the L</PL_peepp> hook.
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
=cut
*/
@@ -389,6 +443,10 @@ It is also assured to first fire for the parent OP and then for its kids.
When you replace this variable, it is considered a good practice to store the possibly previously installed hook and that you recall it inside your own.
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
=cut
*/
@@ -434,7 +492,7 @@ PERLVAR(I, e_script, SV *)
PERLVAR(I, basetime, Time_t) /* $^T */
PERLVARI(I, maxsysfd, I32, MAXSYSFD)
- /* top fd to pass to subprocesses */
+ /* top fd to pass to subprocesses */
PERLVAR(I, statusvalue, I32) /* $? */
#ifdef VMS
PERLVAR(I, statusvalue_vms, U32)
@@ -463,12 +521,17 @@ PERLVAR(I, DBgv, GV *) /* *DB::DB */
PERLVAR(I, DBline, GV *) /* *DB::line */
/*
+=for apidoc_section $debugging
=for apidoc mn|GV *|PL_DBsub
When Perl is run in debugging mode, with the B<-d> switch, this GV contains
the SV which holds the name of the sub being debugged. This is the C
variable which corresponds to Perl's $DB::sub variable. See
C<L</PL_DBsingle>>.
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
=for apidoc mn|SV *|PL_DBsingle
When Perl is run in debugging mode, with the B<-d> switch, this SV is a
boolean which indicates whether subs are being single-stepped.
@@ -476,11 +539,19 @@ Single-stepping is automatically turned on after every step. This is the C
variable which corresponds to Perl's $DB::single variable. See
C<L</PL_DBsub>>.
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
=for apidoc mn|SV *|PL_DBtrace
Trace variable used when Perl is run in debugging mode, with the B<-d>
switch. This is the C variable which corresponds to Perl's $DB::trace
variable. See C<L</PL_DBsingle>>.
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
=cut
*/
@@ -541,14 +612,15 @@ PERLVARI(I, laststype, U16, OP_STAT)
PERLVARI(I, laststatval, int, -1)
PERLVAR(I, modcount, I32) /* how much op_lvalue()ification in
- assignment? */
+ assignment? */
/* interpreter atexit processing */
PERLVARI(I, exitlistlen, I32, 0) /* length of same */
PERLVARI(I, exitlist, PerlExitListEntry *, NULL)
- /* list of exit functions */
+ /* list of exit functions */
/*
+=for apidoc_section $HV
=for apidoc Amn|HV*|PL_modglobal
C<PL_modglobal> is a general purpose, interpreter global HV for use by
@@ -557,6 +629,10 @@ In a pinch, it can also be used as a symbol table for extensions
to share data among each other. It is a good idea to use keys
prefixed by the package name of the extension that owns the data.
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
=cut
*/
@@ -574,7 +650,7 @@ PERLVAR(I, comppad_name_floor, PADOFFSET)/* start of vars in innermost block */
#ifdef HAVE_INTERP_INTERN
PERLVAR(I, sys_intern, struct interp_intern)
- /* platform internals */
+ /* platform internals */
#endif
/* more statics moved here */
@@ -628,14 +704,6 @@ PERLVAR(I, debug, volatile U32) /* flags given to -D switch */
PERLVARI(I, padlist_generation, U32, 1) /* id to identify padlist clones */
-/*
-=for apidoc Amn|runops_proc_t|PL_runops
-
-See L<perlguts/Pluggable runops>.
-
-=cut
-*/
-
PERLVARI(I, runops, runops_proc_t, RUNOPS_DEFAULT)
PERLVAR(I, subname, SV *) /* name of current subroutine */
@@ -645,7 +713,7 @@ PERLVAR(I, min_intro_pending, PADOFFSET)/* start of vars to introduce */
PERLVAR(I, max_intro_pending, PADOFFSET)/* end of vars to introduce */
PERLVAR(I, padix, PADOFFSET) /* lowest unused index - 1
- in current "register" pad */
+ in current "register" pad */
PERLVAR(I, constpadix, PADOFFSET) /* lowest unused for constants */
PERLVAR(I, padix_floor, PADOFFSET) /* how low may inner block reset padix */
@@ -654,6 +722,8 @@ PERLVAR(I, padix_floor, PADOFFSET) /* how low may inner block reset padix */
&& defined(USE_THREAD_SAFE_LOCALE) \
&& ! defined(HAS_QUERYLOCALE)
+/* This is the most number of categories we've encountered so far on any
+ * platform */
PERLVARA(I, curlocales, 12, char *)
#endif
@@ -668,7 +738,7 @@ PERLVARI(I, strxfrm_is_behaved, bool, TRUE)
/* Assume until proven otherwise that it works */
PERLVARI(I, strxfrm_max_cp, U8, 0) /* Highest collating cp in locale */
PERLVARI(I, collation_standard, bool, TRUE)
- /* Assume simple collation */
+ /* Assume simple collation */
#endif /* USE_LOCALE_COLLATE */
PERLVARI(I, langinfo_buf, char *, NULL)
@@ -680,9 +750,6 @@ PERLVARI(I, setlocale_bufsize, Size_t, 0)
PERLVAR(I, sawampersand, U8) /* must save all match strings */
#endif
-PERLVAR(I, unsafe, bool)
-PERLVAR(I, colorset, bool) /* PERL_RE_COLORS env var is in use */
-
/* current phase the interpreter is in
for ordering this structure to remove holes, we're assuming that this is 4
bytes. */
@@ -690,7 +757,11 @@ PERLVARI(I, phase, enum perl_phase, PERL_PHASE_CONSTRUCT)
PERLVARI(I, in_load_module, bool, FALSE) /* to prevent recursions in PerlIO_find_layer */
+PERLVAR(I, unsafe, bool)
+PERLVAR(I, colorset, bool) /* PERL_RE_COLORS env var is in use */
+
/*
+=for apidoc_section $embedding
=for apidoc Amn|signed char|PL_perl_destruct_level
This value may be set when embedding for full cleanup.
@@ -710,18 +781,27 @@ Possible values:
If C<$ENV{PERL_DESTRUCT_LEVEL}> is set to an integer greater than the
value of C<PL_perl_destruct_level> its value is used instead.
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
=cut
*/
/* mod_perl is special, and also assigns a meaning -1 */
PERLVARI(I, perl_destruct_level, signed char, 0)
+PERLVAR(I, pad_reset_pending, bool) /* reset pad on next attempted alloc */
+
+PERLVAR(I, srand_called, bool)
+
#ifdef USE_LOCALE_NUMERIC
-PERLVARI(I, numeric_standard, int, TRUE)
- /* Assume C locale numerics */
PERLVARI(I, numeric_underlying, bool, TRUE)
- /* Assume underlying locale numerics */
+ /* Assume underlying locale numerics */
PERLVARI(I, numeric_underlying_is_standard, bool, TRUE)
+
+PERLVARI(I, numeric_standard, int, TRUE)
+ /* Assume C locale numerics */
PERLVAR(I, numeric_name, char *) /* Name of current numeric locale */
PERLVAR(I, numeric_radix_sv, SV *) /* The radix separator if not '.' */
@@ -732,15 +812,6 @@ PERLVARI(I, underlying_numeric_obj, locale_t, NULL)
# endif
#endif /* !USE_LOCALE_NUMERIC */
-#ifdef FCRYPT
-PERLVARI(I, cryptseen, bool, FALSE) /* has fast crypt() been initialized? */
-#else
-/* One byte hole in the interpreter structure. */
-#endif
-
-PERLVAR(I, pad_reset_pending, bool) /* reset pad on next attempted alloc */
-PERLVAR(I, srand_called, bool)
-
/* Array of signal handlers, indexed by signal number, through which the C
signal handler dispatches. */
PERLVAR(I, psig_ptr, SV **)
@@ -769,12 +840,12 @@ PERLVAR(I, body_arenas, void *) /* pointer to list of body-arenas */
#if defined(USE_ITHREADS)
PERLVAR(I, regex_pad, SV **) /* Shortcut into the array of
- regex_padav */
+ regex_padav */
PERLVAR(I, regex_padav, AV *) /* All regex objects, indexed via the
- values in op_pmoffset of pmop.
- Entry 0 is an SV whose PV is a
- "packed" list of IVs listing
- the now-free slots in the array */
+ values in op_pmoffset of pmop.
+ Entry 0 is an SV whose PV is a
+ "packed" list of IVs listing
+ the now-free slots in the array */
PERLVAR(I, stashpad, HV **) /* for CopSTASH */
PERLVARI(I, stashpadmax, PADOFFSET, 64)
PERLVARI(I, stashpadix, PADOFFSET, 0)
@@ -795,7 +866,7 @@ PERLVARI(I, def_layerlist, PerlIO_list_t *, NULL)
PERLVARI(I, checkav_save, AV *, NULL) /* save CHECK{}s when compiling */
PERLVARI(I, unitcheckav_save, AV *, NULL)
- /* save UNITCHECK{}s when compiling */
+ /* save UNITCHECK{}s when compiling */
PERLVARI(I, clocktick, long, 0) /* this many times() ticks in a second */
@@ -847,11 +918,13 @@ PERLVAR(I, debug_pad, struct perl_debug_pad) /* always needed because of the re
/* Hook for File::Glob */
PERLVARI(I, globhook, globhook_t, NULL)
+#if defined(MULTIPLICITY)
/* The last unconditional member of the interpreter structure when 5.18.0 was
released. The offset of the end of this is baked into a global variable in
any shared perl library which will allow a sanity test in future perl
releases. */
-#define PERL_LAST_5_18_0_INTERP_MEMBER Iglobhook
+# define PERL_LAST_5_18_0_INTERP_MEMBER Iglobhook
+#endif
#ifdef PERL_IMPLICIT_CONTEXT
PERLVARI(I, my_cxt_list, void **, NULL) /* per-module array of MY_CXT pointers */
@@ -949,6 +1022,12 @@ PERLVAR(I, mbrtowc_ps, mbstate_t)
#ifdef HAS_WCRTOMB
PERLVAR(I, wcrtomb_ps, mbstate_t)
#endif
+#ifdef PERL_MEM_LOG
+/* Enough space for the reserved byte, 1 for a potential leading 0, then enough
+ * for the longest representable integer plus an extra, the 3 flag characters,
+ * and NUL */
+PERLVARA(I, mem_log, 1 + 1 + TYPE_DIGITS(UV) + 1 + 3 + 1, char);
+#endif
/* If you are adding a U8 or U16, check to see if there are 'Space' comments
* above on where there are gaps which currently will be structure padding. */
@@ -957,6 +1036,4 @@ PERLVAR(I, wcrtomb_ps, mbstate_t)
* this comment, for binary compatibility (the offsets of the old members must
* not change).
* (Don't forget to add your variable also to perl_clone()!)
- * XSUB.h provides wrapper functions via perlapi.h that make this
- * irrelevant, but not all code may be expected to #include XSUB.h.
*/
diff --git a/Master/tlpkg/tlperl/lib/CORE/invlist_inline.h b/Master/tlpkg/tlperl/lib/CORE/invlist_inline.h
index f6ac8195335..0f24f3d5036 100644
--- a/Master/tlpkg/tlperl/lib/CORE/invlist_inline.h
+++ b/Master/tlpkg/tlperl/lib/CORE/invlist_inline.h
@@ -145,7 +145,7 @@ S_invlist_highest(SV* const invlist)
PERL_ARGS_ASSERT_INVLIST_HIGHEST;
if (len == 0) {
- return 0;
+ return 0;
}
array = invlist_array(invlist);
@@ -218,8 +218,8 @@ S_invlist_iternext(SV* invlist, UV* start, UV* end)
PERL_ARGS_ASSERT_INVLIST_ITERNEXT;
if (*pos >= len) {
- *pos = (STRLEN) UV_MAX; /* Force iterinit() to be required next time */
- return FALSE;
+ *pos = (STRLEN) UV_MAX; /* Force iterinit() to be required next time */
+ return FALSE;
}
array = invlist_array(invlist);
@@ -227,10 +227,10 @@ S_invlist_iternext(SV* invlist, UV* start, UV* end)
*start = array[(*pos)++];
if (*pos >= len) {
- *end = UV_MAX;
+ *end = UV_MAX;
}
else {
- *end = array[(*pos)++] - 1;
+ *end = array[(*pos)++] - 1;
}
return TRUE;
diff --git a/Master/tlpkg/tlperl/lib/CORE/iperlsys.h b/Master/tlpkg/tlperl/lib/CORE/iperlsys.h
index c176ad5c559..5ef7f23542d 100644
--- a/Master/tlpkg/tlperl/lib/CORE/iperlsys.h
+++ b/Master/tlpkg/tlperl/lib/CORE/iperlsys.h
@@ -69,7 +69,7 @@ typedef FILE* (*LPStdin)(struct IPerlStdIO*);
typedef FILE* (*LPStdout)(struct IPerlStdIO*);
typedef FILE* (*LPStderr)(struct IPerlStdIO*);
typedef FILE* (*LPOpen)(struct IPerlStdIO*, const char*,
- const char*);
+ const char*);
typedef int (*LPClose)(struct IPerlStdIO*, FILE*);
typedef int (*LPEof)(struct IPerlStdIO*, FILE*);
typedef int (*LPError)(struct IPerlStdIO*, FILE*);
@@ -87,12 +87,12 @@ typedef int (*LPUngetc)(struct IPerlStdIO*, int,FILE*);
typedef int (*LPFileno)(struct IPerlStdIO*, FILE*);
typedef FILE* (*LPFdopen)(struct IPerlStdIO*, int, const char*);
typedef FILE* (*LPReopen)(struct IPerlStdIO*, const char*,
- const char*, FILE*);
+ const char*, FILE*);
typedef SSize_t (*LPRead)(struct IPerlStdIO*, void*, Size_t, Size_t, FILE *);
typedef SSize_t (*LPWrite)(struct IPerlStdIO*, const void*, Size_t, Size_t, FILE *);
typedef void (*LPSetBuf)(struct IPerlStdIO*, FILE*, char*);
typedef int (*LPSetVBuf)(struct IPerlStdIO*, FILE*, char*, int,
- Size_t);
+ Size_t);
typedef void (*LPSetCnt)(struct IPerlStdIO*, FILE*, int);
#ifndef NETWARE
@@ -103,16 +103,16 @@ typedef void (*LPSetPtr)(struct IPerlStdIO*, FILE*, STDCHAR*, int);
typedef void (*LPSetlinebuf)(struct IPerlStdIO*, FILE*);
typedef int (*LPPrintf)(struct IPerlStdIO*, FILE*, const char*,
- ...);
+ ...);
typedef int (*LPVprintf)(struct IPerlStdIO*, FILE*, const char*,
- va_list);
+ va_list);
typedef Off_t (*LPTell)(struct IPerlStdIO*, FILE*);
typedef int (*LPSeek)(struct IPerlStdIO*, FILE*, Off_t, int);
typedef void (*LPRewind)(struct IPerlStdIO*, FILE*);
typedef FILE* (*LPTmpfile)(struct IPerlStdIO*);
typedef int (*LPGetpos)(struct IPerlStdIO*, FILE*, Fpos_t*);
typedef int (*LPSetpos)(struct IPerlStdIO*, FILE*,
- const Fpos_t*);
+ const Fpos_t*);
typedef void (*LPInit)(struct IPerlStdIO*);
typedef void (*LPInitOSExtras)(struct IPerlStdIO*);
typedef FILE* (*LPFdupopen)(struct IPerlStdIO*, FILE*);
@@ -202,84 +202,84 @@ struct IPerlStdIOInfo
/* Now take FILE * via function table */
#define PerlSIO_stdin \
- (*PL_StdIO->pStdin)(PL_StdIO)
+ (*PL_StdIO->pStdin)(PL_StdIO)
#define PerlSIO_stdout \
- (*PL_StdIO->pStdout)(PL_StdIO)
+ (*PL_StdIO->pStdout)(PL_StdIO)
#define PerlSIO_stderr \
- (*PL_StdIO->pStderr)(PL_StdIO)
+ (*PL_StdIO->pStderr)(PL_StdIO)
#define PerlSIO_fopen(x,y) \
- (*PL_StdIO->pOpen)(PL_StdIO, (x),(y))
+ (*PL_StdIO->pOpen)(PL_StdIO, (x),(y))
#define PerlSIO_fclose(f) \
- (*PL_StdIO->pClose)(PL_StdIO, (f))
+ (*PL_StdIO->pClose)(PL_StdIO, (f))
#define PerlSIO_feof(f) \
- (*PL_StdIO->pEof)(PL_StdIO, (f))
+ (*PL_StdIO->pEof)(PL_StdIO, (f))
#define PerlSIO_ferror(f) \
- (*PL_StdIO->pError)(PL_StdIO, (f))
+ (*PL_StdIO->pError)(PL_StdIO, (f))
#define PerlSIO_clearerr(f) \
- (*PL_StdIO->pClearerr)(PL_StdIO, (f))
+ (*PL_StdIO->pClearerr)(PL_StdIO, (f))
#define PerlSIO_fgetc(f) \
- (*PL_StdIO->pGetc)(PL_StdIO, (f))
+ (*PL_StdIO->pGetc)(PL_StdIO, (f))
#define PerlSIO_get_base(f) \
- (*PL_StdIO->pGetBase)(PL_StdIO, (f))
+ (*PL_StdIO->pGetBase)(PL_StdIO, (f))
#define PerlSIO_get_bufsiz(f) \
- (*PL_StdIO->pGetBufsiz)(PL_StdIO, (f))
+ (*PL_StdIO->pGetBufsiz)(PL_StdIO, (f))
#define PerlSIO_get_cnt(f) \
- (*PL_StdIO->pGetCnt)(PL_StdIO, (f))
+ (*PL_StdIO->pGetCnt)(PL_StdIO, (f))
#define PerlSIO_get_ptr(f) \
- (*PL_StdIO->pGetPtr)(PL_StdIO, (f))
+ (*PL_StdIO->pGetPtr)(PL_StdIO, (f))
#define PerlSIO_fputc(c,f) \
- (*PL_StdIO->pPutc)(PL_StdIO, (c),(f))
+ (*PL_StdIO->pPutc)(PL_StdIO, (c),(f))
#define PerlSIO_fputs(s,f) \
- (*PL_StdIO->pPuts)(PL_StdIO, (s),(f))
+ (*PL_StdIO->pPuts)(PL_StdIO, (s),(f))
#define PerlSIO_fflush(f) \
- (*PL_StdIO->pFlush)(PL_StdIO, (f))
+ (*PL_StdIO->pFlush)(PL_StdIO, (f))
#define PerlSIO_fgets(s, n, f) \
- (*PL_StdIO->pGets)(PL_StdIO, s, n, (f))
+ (*PL_StdIO->pGets)(PL_StdIO, s, n, (f))
#define PerlSIO_ungetc(c,f) \
- (*PL_StdIO->pUngetc)(PL_StdIO, (c),(f))
+ (*PL_StdIO->pUngetc)(PL_StdIO, (c),(f))
#define PerlSIO_fileno(f) \
- (*PL_StdIO->pFileno)(PL_StdIO, (f))
+ (*PL_StdIO->pFileno)(PL_StdIO, (f))
#define PerlSIO_fdopen(f, s) \
- (*PL_StdIO->pFdopen)(PL_StdIO, (f),(s))
+ (*PL_StdIO->pFdopen)(PL_StdIO, (f),(s))
#define PerlSIO_freopen(p, m, f) \
- (*PL_StdIO->pReopen)(PL_StdIO, (p), (m), (f))
+ (*PL_StdIO->pReopen)(PL_StdIO, (p), (m), (f))
#define PerlSIO_fread(buf,sz,count,f) \
- (*PL_StdIO->pRead)(PL_StdIO, (buf), (sz), (count), (f))
+ (*PL_StdIO->pRead)(PL_StdIO, (buf), (sz), (count), (f))
#define PerlSIO_fwrite(buf,sz,count,f) \
- (*PL_StdIO->pWrite)(PL_StdIO, (buf), (sz), (count), (f))
+ (*PL_StdIO->pWrite)(PL_StdIO, (buf), (sz), (count), (f))
#define PerlSIO_setbuf(f,b) \
- (*PL_StdIO->pSetBuf)(PL_StdIO, (f), (b))
+ (*PL_StdIO->pSetBuf)(PL_StdIO, (f), (b))
#define PerlSIO_setvbuf(f,b,t,s) \
- (*PL_StdIO->pSetVBuf)(PL_StdIO, (f),(b),(t),(s))
+ (*PL_StdIO->pSetVBuf)(PL_StdIO, (f),(b),(t),(s))
#define PerlSIO_set_cnt(f,c) \
- (*PL_StdIO->pSetCnt)(PL_StdIO, (f), (c))
+ (*PL_StdIO->pSetCnt)(PL_StdIO, (f), (c))
#define PerlSIO_set_ptr(f,p) \
- (*PL_StdIO->pSetPtr)(PL_StdIO, (f), (p))
+ (*PL_StdIO->pSetPtr)(PL_StdIO, (f), (p))
#define PerlSIO_setlinebuf(f) \
- (*PL_StdIO->pSetlinebuf)(PL_StdIO, (f))
+ (*PL_StdIO->pSetlinebuf)(PL_StdIO, (f))
#define PerlSIO_printf Perl_fprintf_nocontext
#define PerlSIO_stdoutf Perl_printf_nocontext
#define PerlSIO_vprintf(f,fmt,a) \
- (*PL_StdIO->pVprintf)(PL_StdIO, (f),(fmt),a)
+ (*PL_StdIO->pVprintf)(PL_StdIO, (f),(fmt),a)
#define PerlSIO_ftell(f) \
- (*PL_StdIO->pTell)(PL_StdIO, (f))
+ (*PL_StdIO->pTell)(PL_StdIO, (f))
#define PerlSIO_fseek(f,o,w) \
- (*PL_StdIO->pSeek)(PL_StdIO, (f),(o),(w))
+ (*PL_StdIO->pSeek)(PL_StdIO, (f),(o),(w))
#define PerlSIO_fgetpos(f,p) \
- (*PL_StdIO->pGetpos)(PL_StdIO, (f),(p))
+ (*PL_StdIO->pGetpos)(PL_StdIO, (f),(p))
#define PerlSIO_fsetpos(f,p) \
- (*PL_StdIO->pSetpos)(PL_StdIO, (f),(p))
+ (*PL_StdIO->pSetpos)(PL_StdIO, (f),(p))
#define PerlSIO_rewind(f) \
- (*PL_StdIO->pRewind)(PL_StdIO, (f))
+ (*PL_StdIO->pRewind)(PL_StdIO, (f))
#define PerlSIO_tmpfile() \
- (*PL_StdIO->pTmpfile)(PL_StdIO)
+ (*PL_StdIO->pTmpfile)(PL_StdIO)
#define PerlSIO_init() \
- (*PL_StdIO->pInit)(PL_StdIO)
+ (*PL_StdIO->pInit)(PL_StdIO)
#undef init_os_extras
#define init_os_extras() \
- (*PL_StdIO->pInitOSExtras)(PL_StdIO)
+ (*PL_StdIO->pInitOSExtras)(PL_StdIO)
#define PerlSIO_fdupopen(f) \
- (*PL_StdIO->pFdupopen)(PL_StdIO, (f))
+ (*PL_StdIO->pFdupopen)(PL_StdIO, (f))
#else /* PERL_IMPLICIT_SYS */
@@ -408,28 +408,28 @@ struct IPerlDirInfo
};
#define PerlDir_mkdir(name, mode) \
- (*PL_Dir->pMakedir)(PL_Dir, (name), (mode))
+ (*PL_Dir->pMakedir)(PL_Dir, (name), (mode))
#define PerlDir_chdir(name) \
- (*PL_Dir->pChdir)(PL_Dir, (name))
+ (*PL_Dir->pChdir)(PL_Dir, (name))
#define PerlDir_rmdir(name) \
- (*PL_Dir->pRmdir)(PL_Dir, (name))
+ (*PL_Dir->pRmdir)(PL_Dir, (name))
#define PerlDir_close(dir) \
- (*PL_Dir->pClose)(PL_Dir, (dir))
+ (*PL_Dir->pClose)(PL_Dir, (dir))
#define PerlDir_open(name) \
- (*PL_Dir->pOpen)(PL_Dir, (name))
+ (*PL_Dir->pOpen)(PL_Dir, (name))
#define PerlDir_read(dir) \
- (*PL_Dir->pRead)(PL_Dir, (dir))
+ (*PL_Dir->pRead)(PL_Dir, (dir))
#define PerlDir_rewind(dir) \
- (*PL_Dir->pRewind)(PL_Dir, (dir))
+ (*PL_Dir->pRewind)(PL_Dir, (dir))
#define PerlDir_seek(dir, loc) \
- (*PL_Dir->pSeek)(PL_Dir, (dir), (loc))
+ (*PL_Dir->pSeek)(PL_Dir, (dir), (loc))
#define PerlDir_tell(dir) \
- (*PL_Dir->pTell)(PL_Dir, (dir))
+ (*PL_Dir->pTell)(PL_Dir, (dir))
#ifdef WIN32
#define PerlDir_mapA(dir) \
- (*PL_Dir->pMapPathA)(PL_Dir, (dir))
+ (*PL_Dir->pMapPathA)(PL_Dir, (dir))
#define PerlDir_mapW(dir) \
- (*PL_Dir->pMapPathW)(PL_Dir, (dir))
+ (*PL_Dir->pMapPathW)(PL_Dir, (dir))
#endif
#else /* PERL_IMPLICIT_SYS */
@@ -466,7 +466,7 @@ struct IPerlEnvInfo;
typedef char* (*LPEnvGetenv)(struct IPerlEnv*, const char*);
typedef int (*LPEnvPutenv)(struct IPerlEnv*, const char*);
typedef char* (*LPEnvGetenv_len)(struct IPerlEnv*,
- const char *varname, unsigned long *len);
+ const char *varname, unsigned long *len);
typedef int (*LPEnvUname)(struct IPerlEnv*, struct utsname *name);
typedef void (*LPEnvClearenv)(struct IPerlEnv*);
typedef void* (*LPEnvGetChildenv)(struct IPerlEnv*);
@@ -476,16 +476,16 @@ typedef void (*LPEnvFreeChilddir)(struct IPerlEnv*, char* dir);
#ifdef HAS_ENVGETENV
typedef char* (*LPENVGetenv)(struct IPerlEnv*, const char *varname);
typedef char* (*LPENVGetenv_len)(struct IPerlEnv*,
- const char *varname, unsigned long *len);
+ const char *varname, unsigned long *len);
#endif
#ifdef WIN32
typedef unsigned long (*LPEnvOsID)(struct IPerlEnv*);
typedef char* (*LPEnvLibPath)(struct IPerlEnv*, WIN32_NO_REGISTRY_M_(const char*)
- STRLEN *const len);
+ STRLEN *const len);
typedef char* (*LPEnvSiteLibPath)(struct IPerlEnv*, const char*,
- STRLEN *const len);
+ STRLEN *const len);
typedef char* (*LPEnvVendorLibPath)(struct IPerlEnv*, const char*,
- STRLEN *const len);
+ STRLEN *const len);
typedef void (*LPEnvGetChildIO)(struct IPerlEnv*, child_IO_table*);
#endif
@@ -520,45 +520,45 @@ struct IPerlEnvInfo
};
#define PerlEnv_putenv(str) \
- (*PL_Env->pPutenv)(PL_Env,(str))
+ (*PL_Env->pPutenv)(PL_Env,(str))
#define PerlEnv_getenv(str) \
- (*PL_Env->pGetenv)(PL_Env,(str))
+ (*PL_Env->pGetenv)(PL_Env,(str))
#define PerlEnv_getenv_len(str,l) \
- (*PL_Env->pGetenv_len)(PL_Env,(str), (l))
+ (*PL_Env->pGetenv_len)(PL_Env,(str), (l))
#define PerlEnv_clearenv() \
- (*PL_Env->pClearenv)(PL_Env)
+ (*PL_Env->pClearenv)(PL_Env)
#define PerlEnv_get_childenv() \
- (*PL_Env->pGetChildenv)(PL_Env)
+ (*PL_Env->pGetChildenv)(PL_Env)
#define PerlEnv_free_childenv(e) \
- (*PL_Env->pFreeChildenv)(PL_Env, (e))
+ (*PL_Env->pFreeChildenv)(PL_Env, (e))
#define PerlEnv_get_childdir() \
- (*PL_Env->pGetChilddir)(PL_Env)
+ (*PL_Env->pGetChilddir)(PL_Env)
#define PerlEnv_free_childdir(d) \
- (*PL_Env->pFreeChilddir)(PL_Env, (d))
+ (*PL_Env->pFreeChilddir)(PL_Env, (d))
#ifdef HAS_ENVGETENV
# define PerlEnv_ENVgetenv(str) \
- (*PL_Env->pENVGetenv)(PL_Env,(str))
+ (*PL_Env->pENVGetenv)(PL_Env,(str))
# define PerlEnv_ENVgetenv_len(str,l) \
- (*PL_Env->pENVGetenv_len)(PL_Env,(str), (l))
+ (*PL_Env->pENVGetenv_len)(PL_Env,(str), (l))
#else
# define PerlEnv_ENVgetenv(str) \
- PerlEnv_getenv((str))
+ PerlEnv_getenv((str))
# define PerlEnv_ENVgetenv_len(str,l) \
- PerlEnv_getenv_len((str),(l))
+ PerlEnv_getenv_len((str),(l))
#endif
#define PerlEnv_uname(name) \
- (*PL_Env->pEnvUname)(PL_Env,(name))
+ (*PL_Env->pEnvUname)(PL_Env,(name))
#ifdef WIN32
#define PerlEnv_os_id() \
- (*PL_Env->pEnvOsID)(PL_Env)
+ (*PL_Env->pEnvOsID)(PL_Env)
#define PerlEnv_lib_path(str, lenp) \
- (*PL_Env->pLibPath)(PL_Env,WIN32_NO_REGISTRY_M_(str)(lenp))
+ (*PL_Env->pLibPath)(PL_Env,WIN32_NO_REGISTRY_M_(str)(lenp))
#define PerlEnv_sitelib_path(str, lenp) \
- (*PL_Env->pSiteLibPath)(PL_Env,(str),(lenp))
+ (*PL_Env->pSiteLibPath)(PL_Env,(str),(lenp))
#define PerlEnv_vendorlib_path(str, lenp) \
- (*PL_Env->pVendorLibPath)(PL_Env,(str),(lenp))
+ (*PL_Env->pVendorLibPath)(PL_Env,(str),(lenp))
#define PerlEnv_get_child_IO(ptr) \
- (*PL_Env->pGetChildIO)(PL_Env, ptr)
+ (*PL_Env->pGetChildIO)(PL_Env, ptr)
#endif
#else /* below is ! PERL_IMPLICIT_SYS */
@@ -620,7 +620,7 @@ struct IPerlLIOInfo;
typedef int (*LPLIOAccess)(struct IPerlLIO*, const char*, int);
typedef int (*LPLIOChmod)(struct IPerlLIO*, const char*, int);
typedef int (*LPLIOChown)(struct IPerlLIO*, const char*, uid_t,
- gid_t);
+ gid_t);
typedef int (*LPLIOChsize)(struct IPerlLIO*, int, Off_t);
typedef int (*LPLIOClose)(struct IPerlLIO*, int);
typedef int (*LPLIODup)(struct IPerlLIO*, int);
@@ -628,32 +628,36 @@ typedef int (*LPLIODup2)(struct IPerlLIO*, int, int);
typedef int (*LPLIOFlock)(struct IPerlLIO*, int, int);
typedef int (*LPLIOFileStat)(struct IPerlLIO*, int, Stat_t*);
typedef int (*LPLIOIOCtl)(struct IPerlLIO*, int, unsigned int,
- char*);
+ char*);
typedef int (*LPLIOIsatty)(struct IPerlLIO*, int);
typedef int (*LPLIOLink)(struct IPerlLIO*, const char*,
- const char *);
+ const char *);
typedef Off_t (*LPLIOLseek)(struct IPerlLIO*, int, Off_t, int);
typedef int (*LPLIOLstat)(struct IPerlLIO*, const char*,
- Stat_t*);
+ Stat_t*);
typedef char* (*LPLIOMktemp)(struct IPerlLIO*, char*);
typedef int (*LPLIOOpen)(struct IPerlLIO*, const char*, int);
typedef int (*LPLIOOpen3)(struct IPerlLIO*, const char*, int, int);
typedef int (*LPLIORead)(struct IPerlLIO*, int, void*, unsigned int);
typedef int (*LPLIORename)(struct IPerlLIO*, const char*,
- const char*);
+ const char*);
#ifdef NETWARE
typedef int (*LPLIOSetmode)(struct IPerlLIO*, FILE*, int);
#else
typedef int (*LPLIOSetmode)(struct IPerlLIO*, int, int);
#endif /* NETWARE */
typedef int (*LPLIONameStat)(struct IPerlLIO*, const char*,
- Stat_t*);
+ Stat_t*);
typedef char* (*LPLIOTmpnam)(struct IPerlLIO*, char*);
typedef int (*LPLIOUmask)(struct IPerlLIO*, int);
typedef int (*LPLIOUnlink)(struct IPerlLIO*, const char*);
typedef int (*LPLIOUtime)(struct IPerlLIO*, const char*, struct utimbuf*);
typedef int (*LPLIOWrite)(struct IPerlLIO*, int, const void*,
- unsigned int);
+ unsigned int);
+typedef int (*LPLIOSymLink)(struct IPerlLIO*, const char*,
+ const char *);
+typedef int (*LPLIOReadLink)(struct IPerlLIO*, const char*,
+ char *, size_t);
struct IPerlLIO
{
@@ -683,6 +687,8 @@ struct IPerlLIO
LPLIOUnlink pUnlink;
LPLIOUtime pUtime;
LPLIOWrite pWrite;
+ LPLIOSymLink pSymLink;
+ LPLIOReadLink pReadLink;
};
struct IPerlLIOInfo
@@ -692,57 +698,61 @@ struct IPerlLIOInfo
};
#define PerlLIO_access(file, mode) \
- (*PL_LIO->pAccess)(PL_LIO, (file), (mode))
+ (*PL_LIO->pAccess)(PL_LIO, (file), (mode))
#define PerlLIO_chmod(file, mode) \
- (*PL_LIO->pChmod)(PL_LIO, (file), (mode))
+ (*PL_LIO->pChmod)(PL_LIO, (file), (mode))
#define PerlLIO_chown(file, owner, group) \
- (*PL_LIO->pChown)(PL_LIO, (file), (owner), (group))
+ (*PL_LIO->pChown)(PL_LIO, (file), (owner), (group))
#define PerlLIO_chsize(fd, size) \
- (*PL_LIO->pChsize)(PL_LIO, (fd), (size))
+ (*PL_LIO->pChsize)(PL_LIO, (fd), (size))
#define PerlLIO_close(fd) \
- (*PL_LIO->pClose)(PL_LIO, (fd))
+ (*PL_LIO->pClose)(PL_LIO, (fd))
#define PerlLIO_dup(fd) \
- (*PL_LIO->pDup)(PL_LIO, (fd))
+ (*PL_LIO->pDup)(PL_LIO, (fd))
#define PerlLIO_dup2(fd1, fd2) \
- (*PL_LIO->pDup2)(PL_LIO, (fd1), (fd2))
+ (*PL_LIO->pDup2)(PL_LIO, (fd1), (fd2))
#define PerlLIO_flock(fd, op) \
- (*PL_LIO->pFlock)(PL_LIO, (fd), (op))
+ (*PL_LIO->pFlock)(PL_LIO, (fd), (op))
#define PerlLIO_fstat(fd, buf) \
- (*PL_LIO->pFileStat)(PL_LIO, (fd), (buf))
+ (*PL_LIO->pFileStat)(PL_LIO, (fd), (buf))
#define PerlLIO_ioctl(fd, u, buf) \
- (*PL_LIO->pIOCtl)(PL_LIO, (fd), (u), (buf))
+ (*PL_LIO->pIOCtl)(PL_LIO, (fd), (u), (buf))
#define PerlLIO_isatty(fd) \
- (*PL_LIO->pIsatty)(PL_LIO, (fd))
+ (*PL_LIO->pIsatty)(PL_LIO, (fd))
#define PerlLIO_link(oldname, newname) \
- (*PL_LIO->pLink)(PL_LIO, (oldname), (newname))
+ (*PL_LIO->pLink)(PL_LIO, (oldname), (newname))
+#define PerlLIO_symlink(oldname, newname) \
+ (*PL_LIO->pSymLink)(PL_LIO, (oldname), (newname))
+#define PerlLIO_readlink(path, buf, bufsiz) \
+ (*PL_LIO->pReadLink)(PL_LIO, (path), (buf), (bufsiz))
#define PerlLIO_lseek(fd, offset, mode) \
- (*PL_LIO->pLseek)(PL_LIO, (fd), (offset), (mode))
+ (*PL_LIO->pLseek)(PL_LIO, (fd), (offset), (mode))
#define PerlLIO_lstat(name, buf) \
- (*PL_LIO->pLstat)(PL_LIO, (name), (buf))
+ (*PL_LIO->pLstat)(PL_LIO, (name), (buf))
#define PerlLIO_mktemp(file) \
- (*PL_LIO->pMktemp)(PL_LIO, (file))
+ (*PL_LIO->pMktemp)(PL_LIO, (file))
#define PerlLIO_open(file, flag) \
- (*PL_LIO->pOpen)(PL_LIO, (file), (flag))
+ (*PL_LIO->pOpen)(PL_LIO, (file), (flag))
#define PerlLIO_open3(file, flag, perm) \
- (*PL_LIO->pOpen3)(PL_LIO, (file), (flag), (perm))
+ (*PL_LIO->pOpen3)(PL_LIO, (file), (flag), (perm))
#define PerlLIO_read(fd, buf, count) \
- (*PL_LIO->pRead)(PL_LIO, (fd), (buf), (count))
+ (*PL_LIO->pRead)(PL_LIO, (fd), (buf), (count))
#define PerlLIO_rename(oname, newname) \
- (*PL_LIO->pRename)(PL_LIO, (oname), (newname))
+ (*PL_LIO->pRename)(PL_LIO, (oname), (newname))
#define PerlLIO_setmode(fd, mode) \
- (*PL_LIO->pSetmode)(PL_LIO, (fd), (mode))
+ (*PL_LIO->pSetmode)(PL_LIO, (fd), (mode))
#define PerlLIO_stat(name, buf) \
- (*PL_LIO->pNameStat)(PL_LIO, (name), (buf))
+ (*PL_LIO->pNameStat)(PL_LIO, (name), (buf))
#define PerlLIO_tmpnam(str) \
- (*PL_LIO->pTmpnam)(PL_LIO, (str))
+ (*PL_LIO->pTmpnam)(PL_LIO, (str))
#define PerlLIO_umask(mode) \
- (*PL_LIO->pUmask)(PL_LIO, (mode))
+ (*PL_LIO->pUmask)(PL_LIO, (mode))
#define PerlLIO_unlink(file) \
- (*PL_LIO->pUnlink)(PL_LIO, (file))
+ (*PL_LIO->pUnlink)(PL_LIO, (file))
#define PerlLIO_utime(file, time) \
- (*PL_LIO->pUtime)(PL_LIO, (file), (time))
+ (*PL_LIO->pUtime)(PL_LIO, (file), (time))
#define PerlLIO_write(fd, buf, count) \
- (*PL_LIO->pWrite)(PL_LIO, (fd), (buf), (count))
+ (*PL_LIO->pWrite)(PL_LIO, (fd), (buf), (count))
#else /* PERL_IMPLICIT_SYS */
@@ -764,6 +774,8 @@ struct IPerlLIOInfo
#define PerlLIO_ioctl(fd, u, buf) ioctl((fd), (u), (buf))
#define PerlLIO_isatty(fd) isatty((fd))
#define PerlLIO_link(oldname, newname) link((oldname), (newname))
+#define PerlLIO_symlink(oldname, newname) symlink((oldname), (newname))
+#define PerlLIO_readlink(path, buf, bufsiz) readlink((path), (buf), (bufsiz))
#define PerlLIO_lseek(fd, offset, mode) lseek((fd), (offset), (mode))
#define PerlLIO_stat(name, buf) Stat((name), (buf))
#ifdef HAS_LSTAT
@@ -821,72 +833,72 @@ struct IPerlMemInfo
/* Interpreter specific memory macros */
#define PerlMem_malloc(size) \
- (*PL_Mem->pMalloc)(PL_Mem, (size))
+ (*PL_Mem->pMalloc)(PL_Mem, (size))
#define PerlMem_realloc(buf, size) \
- (*PL_Mem->pRealloc)(PL_Mem, (buf), (size))
+ (*PL_Mem->pRealloc)(PL_Mem, (buf), (size))
#define PerlMem_free(buf) \
- (*PL_Mem->pFree)(PL_Mem, (buf))
+ (*PL_Mem->pFree)(PL_Mem, (buf))
#define PerlMem_calloc(num, size) \
- (*PL_Mem->pCalloc)(PL_Mem, (num), (size))
+ (*PL_Mem->pCalloc)(PL_Mem, (num), (size))
#define PerlMem_get_lock() \
- (*PL_Mem->pGetLock)(PL_Mem)
+ (*PL_Mem->pGetLock)(PL_Mem)
#define PerlMem_free_lock() \
- (*PL_Mem->pFreeLock)(PL_Mem)
+ (*PL_Mem->pFreeLock)(PL_Mem)
#define PerlMem_is_locked() \
- (*PL_Mem->pIsLocked)(PL_Mem)
+ (*PL_Mem->pIsLocked)(PL_Mem)
/* Shared memory macros */
#ifdef NETWARE
#define PerlMemShared_malloc(size) \
- (*PL_Mem->pMalloc)(PL_Mem, (size))
+ (*PL_Mem->pMalloc)(PL_Mem, (size))
#define PerlMemShared_realloc(buf, size) \
- (*PL_Mem->pRealloc)(PL_Mem, (buf), (size))
+ (*PL_Mem->pRealloc)(PL_Mem, (buf), (size))
#define PerlMemShared_free(buf) \
- (*PL_Mem->pFree)(PL_Mem, (buf))
+ (*PL_Mem->pFree)(PL_Mem, (buf))
#define PerlMemShared_calloc(num, size) \
- (*PL_Mem->pCalloc)(PL_Mem, (num), (size))
+ (*PL_Mem->pCalloc)(PL_Mem, (num), (size))
#define PerlMemShared_get_lock() \
- (*PL_Mem->pGetLock)(PL_Mem)
+ (*PL_Mem->pGetLock)(PL_Mem)
#define PerlMemShared_free_lock() \
- (*PL_Mem->pFreeLock)(PL_Mem)
+ (*PL_Mem->pFreeLock)(PL_Mem)
#define PerlMemShared_is_locked() \
- (*PL_Mem->pIsLocked)(PL_Mem)
+ (*PL_Mem->pIsLocked)(PL_Mem)
#else
#define PerlMemShared_malloc(size) \
- (*PL_MemShared->pMalloc)(PL_MemShared, (size))
+ (*PL_MemShared->pMalloc)(PL_MemShared, (size))
#define PerlMemShared_realloc(buf, size) \
- (*PL_MemShared->pRealloc)(PL_MemShared, (buf), (size))
+ (*PL_MemShared->pRealloc)(PL_MemShared, (buf), (size))
#define PerlMemShared_free(buf) \
- (*PL_MemShared->pFree)(PL_MemShared, (buf))
+ (*PL_MemShared->pFree)(PL_MemShared, (buf))
#define PerlMemShared_calloc(num, size) \
- (*PL_MemShared->pCalloc)(PL_MemShared, (num), (size))
+ (*PL_MemShared->pCalloc)(PL_MemShared, (num), (size))
#define PerlMemShared_get_lock() \
- (*PL_MemShared->pGetLock)(PL_MemShared)
+ (*PL_MemShared->pGetLock)(PL_MemShared)
#define PerlMemShared_free_lock() \
- (*PL_MemShared->pFreeLock)(PL_MemShared)
+ (*PL_MemShared->pFreeLock)(PL_MemShared)
#define PerlMemShared_is_locked() \
- (*PL_MemShared->pIsLocked)(PL_MemShared)
+ (*PL_MemShared->pIsLocked)(PL_MemShared)
#endif
/* Parse tree memory macros */
#define PerlMemParse_malloc(size) \
- (*PL_MemParse->pMalloc)(PL_MemParse, (size))
+ (*PL_MemParse->pMalloc)(PL_MemParse, (size))
#define PerlMemParse_realloc(buf, size) \
- (*PL_MemParse->pRealloc)(PL_MemParse, (buf), (size))
+ (*PL_MemParse->pRealloc)(PL_MemParse, (buf), (size))
#define PerlMemParse_free(buf) \
- (*PL_MemParse->pFree)(PL_MemParse, (buf))
+ (*PL_MemParse->pFree)(PL_MemParse, (buf))
#define PerlMemParse_calloc(num, size) \
- (*PL_MemParse->pCalloc)(PL_MemParse, (num), (size))
+ (*PL_MemParse->pCalloc)(PL_MemParse, (num), (size))
#define PerlMemParse_get_lock() \
- (*PL_MemParse->pGetLock)(PL_MemParse)
+ (*PL_MemParse->pGetLock)(PL_MemParse)
#define PerlMemParse_free_lock() \
- (*PL_MemParse->pFreeLock)(PL_MemParse)
+ (*PL_MemParse->pFreeLock)(PL_MemParse)
#define PerlMemParse_is_locked() \
- (*PL_MemParse->pIsLocked)(PL_MemParse)
+ (*PL_MemParse->pIsLocked)(PL_MemParse)
#else /* PERL_IMPLICIT_SYS */
@@ -936,18 +948,18 @@ struct IPerlProc;
struct IPerlProcInfo;
typedef void (*LPProcAbort)(struct IPerlProc*);
typedef char* (*LPProcCrypt)(struct IPerlProc*, const char*,
- const char*);
+ const char*);
typedef void (*LPProcExit)(struct IPerlProc*, int)
- __attribute__noreturn__;
+ __attribute__noreturn__;
typedef void (*LPProc_Exit)(struct IPerlProc*, int)
- __attribute__noreturn__;
+ __attribute__noreturn__;
typedef int (*LPProcExecl)(struct IPerlProc*, const char*,
- const char*, const char*, const char*,
- const char*);
+ const char*, const char*, const char*,
+ const char*);
typedef int (*LPProcExecv)(struct IPerlProc*, const char*,
- const char*const*);
+ const char*const*);
typedef int (*LPProcExecvp)(struct IPerlProc*, const char*,
- const char*const*);
+ const char*const*);
typedef Uid_t (*LPProcGetuid)(struct IPerlProc*);
typedef Uid_t (*LPProcGeteuid)(struct IPerlProc*);
typedef Gid_t (*LPProcGetgid)(struct IPerlProc*);
@@ -957,9 +969,9 @@ typedef int (*LPProcKill)(struct IPerlProc*, int, int);
typedef int (*LPProcKillpg)(struct IPerlProc*, int, int);
typedef int (*LPProcPauseProc)(struct IPerlProc*);
typedef PerlIO* (*LPProcPopen)(struct IPerlProc*, const char*,
- const char*);
+ const char*);
typedef PerlIO* (*LPProcPopenList)(struct IPerlProc*, const char*,
- IV narg, SV **args);
+ IV narg, SV **args);
typedef int (*LPProcPclose)(struct IPerlProc*, PerlIO*);
typedef int (*LPProcPipe)(struct IPerlProc*, int*);
typedef int (*LPProcSetuid)(struct IPerlProc*, uid_t);
@@ -974,13 +986,13 @@ typedef int (*LPProcGetpid)(struct IPerlProc*);
#ifdef WIN32
typedef void* (*LPProcDynaLoader)(struct IPerlProc*, const char*);
typedef void (*LPProcGetOSError)(struct IPerlProc*,
- SV* sv, DWORD dwErr);
+ SV* sv, DWORD dwErr);
typedef int (*LPProcSpawnvp)(struct IPerlProc*, int, const char*,
- const char*const*);
+ const char*const*);
#endif
typedef int (*LPProcLastHost)(struct IPerlProc*);
typedef int (*LPProcGetTimeOfDay)(struct IPerlProc*,
- struct timeval*, void*);
+ struct timeval*, void*);
struct IPerlProc
{
@@ -1028,76 +1040,76 @@ struct IPerlProcInfo
};
#define PerlProc_abort() \
- (*PL_Proc->pAbort)(PL_Proc)
+ (*PL_Proc->pAbort)(PL_Proc)
#define PerlProc_crypt(c,s) \
- (*PL_Proc->pCrypt)(PL_Proc, (c), (s))
+ (*PL_Proc->pCrypt)(PL_Proc, (c), (s))
#define PerlProc_exit(s) \
- (*PL_Proc->pExit)(PL_Proc, (s))
+ (*PL_Proc->pExit)(PL_Proc, (s))
#define PerlProc__exit(s) \
- (*PL_Proc->p_Exit)(PL_Proc, (s))
+ (*PL_Proc->p_Exit)(PL_Proc, (s))
#define PerlProc_execl(c, w, x, y, z) \
- (*PL_Proc->pExecl)(PL_Proc, (c), (w), (x), (y), (z))
+ (*PL_Proc->pExecl)(PL_Proc, (c), (w), (x), (y), (z))
#define PerlProc_execv(c, a) \
- (*PL_Proc->pExecv)(PL_Proc, (c), (a))
+ (*PL_Proc->pExecv)(PL_Proc, (c), (a))
#define PerlProc_execvp(c, a) \
- (*PL_Proc->pExecvp)(PL_Proc, (c), (a))
+ (*PL_Proc->pExecvp)(PL_Proc, (c), (a))
#define PerlProc_getuid() \
- (*PL_Proc->pGetuid)(PL_Proc)
+ (*PL_Proc->pGetuid)(PL_Proc)
#define PerlProc_geteuid() \
- (*PL_Proc->pGeteuid)(PL_Proc)
+ (*PL_Proc->pGeteuid)(PL_Proc)
#define PerlProc_getgid() \
- (*PL_Proc->pGetgid)(PL_Proc)
+ (*PL_Proc->pGetgid)(PL_Proc)
#define PerlProc_getegid() \
- (*PL_Proc->pGetegid)(PL_Proc)
+ (*PL_Proc->pGetegid)(PL_Proc)
#define PerlProc_getlogin() \
- (*PL_Proc->pGetlogin)(PL_Proc)
+ (*PL_Proc->pGetlogin)(PL_Proc)
#define PerlProc_kill(i, a) \
- (*PL_Proc->pKill)(PL_Proc, (i), (a))
+ (*PL_Proc->pKill)(PL_Proc, (i), (a))
#define PerlProc_killpg(i, a) \
- (*PL_Proc->pKillpg)(PL_Proc, (i), (a))
+ (*PL_Proc->pKillpg)(PL_Proc, (i), (a))
#define PerlProc_pause() \
- (*PL_Proc->pPauseProc)(PL_Proc)
+ (*PL_Proc->pPauseProc)(PL_Proc)
#define PerlProc_popen(c, m) \
- (*PL_Proc->pPopen)(PL_Proc, (c), (m))
+ (*PL_Proc->pPopen)(PL_Proc, (c), (m))
#define PerlProc_popen_list(m, n, a) \
- (*PL_Proc->pPopenList)(PL_Proc, (m), (n), (a))
+ (*PL_Proc->pPopenList)(PL_Proc, (m), (n), (a))
#define PerlProc_pclose(f) \
- (*PL_Proc->pPclose)(PL_Proc, (f))
+ (*PL_Proc->pPclose)(PL_Proc, (f))
#define PerlProc_pipe(fd) \
- (*PL_Proc->pPipe)(PL_Proc, (fd))
+ (*PL_Proc->pPipe)(PL_Proc, (fd))
#define PerlProc_setuid(u) \
- (*PL_Proc->pSetuid)(PL_Proc, (u))
+ (*PL_Proc->pSetuid)(PL_Proc, (u))
#define PerlProc_setgid(g) \
- (*PL_Proc->pSetgid)(PL_Proc, (g))
+ (*PL_Proc->pSetgid)(PL_Proc, (g))
#define PerlProc_sleep(t) \
- (*PL_Proc->pSleep)(PL_Proc, (t))
+ (*PL_Proc->pSleep)(PL_Proc, (t))
#define PerlProc_times(t) \
- (*PL_Proc->pTimes)(PL_Proc, (t))
+ (*PL_Proc->pTimes)(PL_Proc, (t))
#define PerlProc_wait(t) \
- (*PL_Proc->pWait)(PL_Proc, (t))
+ (*PL_Proc->pWait)(PL_Proc, (t))
#define PerlProc_waitpid(p,s,f) \
- (*PL_Proc->pWaitpid)(PL_Proc, (p), (s), (f))
+ (*PL_Proc->pWaitpid)(PL_Proc, (p), (s), (f))
#define PerlProc_signal(n, h) \
- (*PL_Proc->pSignal)(PL_Proc, (n), (h))
+ (*PL_Proc->pSignal)(PL_Proc, (n), (h))
#define PerlProc_fork() \
- (*PL_Proc->pFork)(PL_Proc)
+ (*PL_Proc->pFork)(PL_Proc)
#define PerlProc_getpid() \
- (*PL_Proc->pGetpid)(PL_Proc)
+ (*PL_Proc->pGetpid)(PL_Proc)
#define PerlProc_setjmp(b, n) Sigsetjmp((b), (n))
#define PerlProc_longjmp(b, n) Siglongjmp((b), (n))
#ifdef WIN32
#define PerlProc_DynaLoad(f) \
- (*PL_Proc->pDynaLoader)(PL_Proc, (f))
+ (*PL_Proc->pDynaLoader)(PL_Proc, (f))
#define PerlProc_GetOSError(s,e) \
- (*PL_Proc->pGetOSError)(PL_Proc, (s), (e))
+ (*PL_Proc->pGetOSError)(PL_Proc, (s), (e))
#define PerlProc_spawnvp(m, c, a) \
- (*PL_Proc->pSpawnvp)(PL_Proc, (m), (c), (a))
+ (*PL_Proc->pSpawnvp)(PL_Proc, (m), (c), (a))
#endif
#define PerlProc_lasthost() \
- (*PL_Proc->pLastHost)(PL_Proc)
+ (*PL_Proc->pLastHost)(PL_Proc)
#define PerlProc_gettimeofday(t,z) \
- (*PL_Proc->pGetTimeOfDay)(PL_Proc,(t),(z))
+ (*PL_Proc->pGetTimeOfDay)(PL_Proc,(t),(z))
#else /* PERL_IMPLICIT_SYS */
@@ -1106,7 +1118,7 @@ struct IPerlProcInfo
#define PerlProc_exit(s) exit((s))
#define PerlProc__exit(s) _exit((s))
#define PerlProc_execl(c,w,x,y,z) \
- execl((c), (w), (x), (y), (z))
+ execl((c), (w), (x), (y), (z))
#define PerlProc_execv(c, a) execv((c), (a))
#define PerlProc_execvp(c, a) execvp((c), (a))
#define PerlProc_getuid() getuid()
@@ -1136,11 +1148,11 @@ struct IPerlProcInfo
#ifdef WIN32
#define PerlProc_DynaLoad(f) \
- win32_dynaload((f))
+ win32_dynaload((f))
#define PerlProc_GetOSError(s,e) \
- win32_str_os_error((s), (e))
+ win32_str_os_error((s), (e))
#define PerlProc_spawnvp(m, c, a) \
- win32_spawnvp((m), (c), (a))
+ win32_spawnvp((m), (c), (a))
#undef PerlProc_signal
#define PerlProc_signal(n, h) win32_signal((n), (h))
#endif
@@ -1160,20 +1172,20 @@ typedef u_short (*LPHtons)(struct IPerlSock*, u_short);
typedef u_long (*LPNtohl)(struct IPerlSock*, u_long);
typedef u_short (*LPNtohs)(struct IPerlSock*, u_short);
typedef SOCKET (*LPAccept)(struct IPerlSock*, SOCKET,
- struct sockaddr*, int*);
+ struct sockaddr*, int*);
typedef int (*LPBind)(struct IPerlSock*, SOCKET,
- const struct sockaddr*, int);
+ const struct sockaddr*, int);
typedef int (*LPConnect)(struct IPerlSock*, SOCKET,
- const struct sockaddr*, int);
+ const struct sockaddr*, int);
typedef void (*LPEndhostent)(struct IPerlSock*);
typedef void (*LPEndnetent)(struct IPerlSock*);
typedef void (*LPEndprotoent)(struct IPerlSock*);
typedef void (*LPEndservent)(struct IPerlSock*);
typedef int (*LPGethostname)(struct IPerlSock*, char*, int);
typedef int (*LPGetpeername)(struct IPerlSock*, SOCKET,
- struct sockaddr*, int*);
+ struct sockaddr*, int*);
typedef struct hostent* (*LPGethostbyaddr)(struct IPerlSock*, const char*,
- int, int);
+ int, int);
typedef struct hostent* (*LPGethostbyname)(struct IPerlSock*, const char*);
typedef struct hostent* (*LPGethostent)(struct IPerlSock*);
typedef struct netent* (*LPGetnetbyaddr)(struct IPerlSock*, long, int);
@@ -1183,36 +1195,36 @@ typedef struct protoent*(*LPGetprotobyname)(struct IPerlSock*, const char*);
typedef struct protoent*(*LPGetprotobynumber)(struct IPerlSock*, int);
typedef struct protoent*(*LPGetprotoent)(struct IPerlSock*);
typedef struct servent* (*LPGetservbyname)(struct IPerlSock*, const char*,
- const char*);
+ const char*);
typedef struct servent* (*LPGetservbyport)(struct IPerlSock*, int,
- const char*);
+ const char*);
typedef struct servent* (*LPGetservent)(struct IPerlSock*);
typedef int (*LPGetsockname)(struct IPerlSock*, SOCKET,
- struct sockaddr*, int*);
+ struct sockaddr*, int*);
typedef int (*LPGetsockopt)(struct IPerlSock*, SOCKET, int, int,
- char*, int*);
+ char*, int*);
typedef unsigned long (*LPInetAddr)(struct IPerlSock*, const char*);
typedef char* (*LPInetNtoa)(struct IPerlSock*, struct in_addr);
typedef int (*LPListen)(struct IPerlSock*, SOCKET, int);
typedef int (*LPRecv)(struct IPerlSock*, SOCKET, char*, int, int);
typedef int (*LPRecvfrom)(struct IPerlSock*, SOCKET, char*, int,
- int, struct sockaddr*, int*);
+ int, struct sockaddr*, int*);
typedef int (*LPSelect)(struct IPerlSock*, int, char*, char*,
- char*, const struct timeval*);
+ char*, const struct timeval*);
typedef int (*LPSend)(struct IPerlSock*, SOCKET, const char*, int,
- int);
+ int);
typedef int (*LPSendto)(struct IPerlSock*, SOCKET, const char*,
- int, int, const struct sockaddr*, int);
+ int, int, const struct sockaddr*, int);
typedef void (*LPSethostent)(struct IPerlSock*, int);
typedef void (*LPSetnetent)(struct IPerlSock*, int);
typedef void (*LPSetprotoent)(struct IPerlSock*, int);
typedef void (*LPSetservent)(struct IPerlSock*, int);
typedef int (*LPSetsockopt)(struct IPerlSock*, SOCKET, int, int,
- const char*, int);
+ const char*, int);
typedef int (*LPShutdown)(struct IPerlSock*, SOCKET, int);
typedef SOCKET (*LPSocket)(struct IPerlSock*, int, int, int);
typedef int (*LPSocketpair)(struct IPerlSock*, int, int, int,
- int*);
+ int*);
#ifdef WIN32
typedef int (*LPClosesocket)(struct IPerlSock*, SOCKET s);
#endif
@@ -1274,98 +1286,98 @@ struct IPerlSockInfo
};
#define PerlSock_htonl(x) \
- (*PL_Sock->pHtonl)(PL_Sock, x)
+ (*PL_Sock->pHtonl)(PL_Sock, x)
#define PerlSock_htons(x) \
- (*PL_Sock->pHtons)(PL_Sock, x)
+ (*PL_Sock->pHtons)(PL_Sock, x)
#define PerlSock_ntohl(x) \
- (*PL_Sock->pNtohl)(PL_Sock, x)
+ (*PL_Sock->pNtohl)(PL_Sock, x)
#define PerlSock_ntohs(x) \
- (*PL_Sock->pNtohs)(PL_Sock, x)
+ (*PL_Sock->pNtohs)(PL_Sock, x)
#define PerlSock_accept(s, a, l) \
- (*PL_Sock->pAccept)(PL_Sock, s, a, l)
+ (*PL_Sock->pAccept)(PL_Sock, s, a, l)
#define PerlSock_bind(s, n, l) \
- (*PL_Sock->pBind)(PL_Sock, s, n, l)
+ (*PL_Sock->pBind)(PL_Sock, s, n, l)
#define PerlSock_connect(s, n, l) \
- (*PL_Sock->pConnect)(PL_Sock, s, n, l)
+ (*PL_Sock->pConnect)(PL_Sock, s, n, l)
#define PerlSock_endhostent() \
- (*PL_Sock->pEndhostent)(PL_Sock)
+ (*PL_Sock->pEndhostent)(PL_Sock)
#define PerlSock_endnetent() \
- (*PL_Sock->pEndnetent)(PL_Sock)
+ (*PL_Sock->pEndnetent)(PL_Sock)
#define PerlSock_endprotoent() \
- (*PL_Sock->pEndprotoent)(PL_Sock)
+ (*PL_Sock->pEndprotoent)(PL_Sock)
#define PerlSock_endservent() \
- (*PL_Sock->pEndservent)(PL_Sock)
+ (*PL_Sock->pEndservent)(PL_Sock)
#define PerlSock_gethostbyaddr(a, l, t) \
- (*PL_Sock->pGethostbyaddr)(PL_Sock, a, l, t)
+ (*PL_Sock->pGethostbyaddr)(PL_Sock, a, l, t)
#define PerlSock_gethostbyname(n) \
- (*PL_Sock->pGethostbyname)(PL_Sock, n)
+ (*PL_Sock->pGethostbyname)(PL_Sock, n)
#define PerlSock_gethostent() \
- (*PL_Sock->pGethostent)(PL_Sock)
+ (*PL_Sock->pGethostent)(PL_Sock)
#define PerlSock_gethostname(n, l) \
- (*PL_Sock->pGethostname)(PL_Sock, n, l)
+ (*PL_Sock->pGethostname)(PL_Sock, n, l)
#define PerlSock_getnetbyaddr(n, t) \
- (*PL_Sock->pGetnetbyaddr)(PL_Sock, n, t)
+ (*PL_Sock->pGetnetbyaddr)(PL_Sock, n, t)
#define PerlSock_getnetbyname(c) \
- (*PL_Sock->pGetnetbyname)(PL_Sock, c)
+ (*PL_Sock->pGetnetbyname)(PL_Sock, c)
#define PerlSock_getnetent() \
- (*PL_Sock->pGetnetent)(PL_Sock)
+ (*PL_Sock->pGetnetent)(PL_Sock)
#define PerlSock_getpeername(s, n, l) \
- (*PL_Sock->pGetpeername)(PL_Sock, s, n, l)
+ (*PL_Sock->pGetpeername)(PL_Sock, s, n, l)
#define PerlSock_getprotobyname(n) \
- (*PL_Sock->pGetprotobyname)(PL_Sock, n)
+ (*PL_Sock->pGetprotobyname)(PL_Sock, n)
#define PerlSock_getprotobynumber(n) \
- (*PL_Sock->pGetprotobynumber)(PL_Sock, n)
+ (*PL_Sock->pGetprotobynumber)(PL_Sock, n)
#define PerlSock_getprotoent() \
- (*PL_Sock->pGetprotoent)(PL_Sock)
+ (*PL_Sock->pGetprotoent)(PL_Sock)
#define PerlSock_getservbyname(n, p) \
- (*PL_Sock->pGetservbyname)(PL_Sock, n, p)
+ (*PL_Sock->pGetservbyname)(PL_Sock, n, p)
#define PerlSock_getservbyport(port, p) \
- (*PL_Sock->pGetservbyport)(PL_Sock, port, p)
+ (*PL_Sock->pGetservbyport)(PL_Sock, port, p)
#define PerlSock_getservent() \
- (*PL_Sock->pGetservent)(PL_Sock)
+ (*PL_Sock->pGetservent)(PL_Sock)
#define PerlSock_getsockname(s, n, l) \
- (*PL_Sock->pGetsockname)(PL_Sock, s, n, l)
+ (*PL_Sock->pGetsockname)(PL_Sock, s, n, l)
#define PerlSock_getsockopt(s,l,n,v,i) \
- (*PL_Sock->pGetsockopt)(PL_Sock, s, l, n, v, i)
+ (*PL_Sock->pGetsockopt)(PL_Sock, s, l, n, v, i)
#define PerlSock_inet_addr(c) \
- (*PL_Sock->pInetAddr)(PL_Sock, c)
+ (*PL_Sock->pInetAddr)(PL_Sock, c)
#define PerlSock_inet_ntoa(i) \
- (*PL_Sock->pInetNtoa)(PL_Sock, i)
+ (*PL_Sock->pInetNtoa)(PL_Sock, i)
#define PerlSock_listen(s, b) \
- (*PL_Sock->pListen)(PL_Sock, s, b)
+ (*PL_Sock->pListen)(PL_Sock, s, b)
#define PerlSock_recv(s, b, l, f) \
- (*PL_Sock->pRecv)(PL_Sock, s, b, l, f)
+ (*PL_Sock->pRecv)(PL_Sock, s, b, l, f)
#define PerlSock_recvfrom(s,b,l,f,from,fromlen) \
- (*PL_Sock->pRecvfrom)(PL_Sock, s, b, l, f, from, fromlen)
+ (*PL_Sock->pRecvfrom)(PL_Sock, s, b, l, f, from, fromlen)
#define PerlSock_select(n, r, w, e, t) \
- (*PL_Sock->pSelect)(PL_Sock, n, (char*)r, (char*)w, (char*)e, t)
+ (*PL_Sock->pSelect)(PL_Sock, n, (char*)r, (char*)w, (char*)e, t)
#define PerlSock_send(s, b, l, f) \
- (*PL_Sock->pSend)(PL_Sock, s, b, l, f)
+ (*PL_Sock->pSend)(PL_Sock, s, b, l, f)
#define PerlSock_sendto(s, b, l, f, t, tlen) \
- (*PL_Sock->pSendto)(PL_Sock, s, b, l, f, t, tlen)
+ (*PL_Sock->pSendto)(PL_Sock, s, b, l, f, t, tlen)
#define PerlSock_sethostent(f) \
- (*PL_Sock->pSethostent)(PL_Sock, f)
+ (*PL_Sock->pSethostent)(PL_Sock, f)
#define PerlSock_setnetent(f) \
- (*PL_Sock->pSetnetent)(PL_Sock, f)
+ (*PL_Sock->pSetnetent)(PL_Sock, f)
#define PerlSock_setprotoent(f) \
- (*PL_Sock->pSetprotoent)(PL_Sock, f)
+ (*PL_Sock->pSetprotoent)(PL_Sock, f)
#define PerlSock_setservent(f) \
- (*PL_Sock->pSetservent)(PL_Sock, f)
+ (*PL_Sock->pSetservent)(PL_Sock, f)
#define PerlSock_setsockopt(s, l, n, v, len) \
- (*PL_Sock->pSetsockopt)(PL_Sock, s, l, n, v, len)
+ (*PL_Sock->pSetsockopt)(PL_Sock, s, l, n, v, len)
#define PerlSock_shutdown(s, h) \
- (*PL_Sock->pShutdown)(PL_Sock, s, h)
+ (*PL_Sock->pShutdown)(PL_Sock, s, h)
#define PerlSock_socket(a, t, p) \
- (*PL_Sock->pSocket)(PL_Sock, a, t, p)
+ (*PL_Sock->pSocket)(PL_Sock, a, t, p)
#define PerlSock_socketpair(a, t, p, f) \
- (*PL_Sock->pSocketpair)(PL_Sock, a, t, p, f)
+ (*PL_Sock->pSocketpair)(PL_Sock, a, t, p, f)
#ifdef WIN32
#define PerlSock_closesocket(s) \
- (*PL_Sock->pClosesocket)(PL_Sock, s)
+ (*PL_Sock->pClosesocket)(PL_Sock, s)
#endif
-#else /* PERL_IMPLICIT_SYS */
+#else /* ! PERL_IMPLICIT_SYS below */
#define PerlSock_htonl(x) htonl(x)
#define PerlSock_htons(x) htons(x)
@@ -1404,17 +1416,17 @@ struct IPerlSockInfo
#define PerlSock_listen(s, b) listen(s, b)
#define PerlSock_recv(s, b, l, f) recv(s, b, l, f)
#define PerlSock_recvfrom(s, b, l, f, from, fromlen) \
- recvfrom(s, b, l, f, from, fromlen)
+ recvfrom(s, b, l, f, from, fromlen)
#define PerlSock_select(n, r, w, e, t) select(n, r, w, e, t)
#define PerlSock_send(s, b, l, f) send(s, b, l, f)
#define PerlSock_sendto(s, b, l, f, t, tlen) \
- sendto(s, b, l, f, t, tlen)
+ sendto(s, b, l, f, t, tlen)
#define PerlSock_sethostent(f) sethostent(f)
#define PerlSock_setnetent(f) setnetent(f)
#define PerlSock_setprotoent(f) setprotoent(f)
#define PerlSock_setservent(f) setservent(f)
#define PerlSock_setsockopt(s, l, n, v, len) \
- setsockopt(s, l, n, v, len)
+ setsockopt(s, l, n, v, len)
#define PerlSock_shutdown(s, h) shutdown(s, h)
#define PerlSock_socket(a, t, p) socket(a, t, p)
#define PerlSock_socketpair(a, t, p, f) socketpair(a, t, p, f)
diff --git a/Master/tlpkg/tlperl/lib/CORE/keywords.h b/Master/tlpkg/tlperl/lib/CORE/keywords.h
index 23fa6944d89..82694905cb8 100644
--- a/Master/tlpkg/tlperl/lib/CORE/keywords.h
+++ b/Master/tlpkg/tlperl/lib/CORE/keywords.h
@@ -37,239 +37,241 @@
#define KEY_bless 21
#define KEY_break 22
#define KEY_caller 23
-#define KEY_chdir 24
-#define KEY_chmod 25
-#define KEY_chomp 26
-#define KEY_chop 27
-#define KEY_chown 28
-#define KEY_chr 29
-#define KEY_chroot 30
-#define KEY_close 31
-#define KEY_closedir 32
-#define KEY_cmp 33
-#define KEY_connect 34
-#define KEY_continue 35
-#define KEY_cos 36
-#define KEY_crypt 37
-#define KEY_dbmclose 38
-#define KEY_dbmopen 39
-#define KEY_default 40
-#define KEY_defined 41
-#define KEY_delete 42
-#define KEY_die 43
-#define KEY_do 44
-#define KEY_dump 45
-#define KEY_each 46
-#define KEY_else 47
-#define KEY_elsif 48
-#define KEY_endgrent 49
-#define KEY_endhostent 50
-#define KEY_endnetent 51
-#define KEY_endprotoent 52
-#define KEY_endpwent 53
-#define KEY_endservent 54
-#define KEY_eof 55
-#define KEY_eq 56
-#define KEY_eval 57
-#define KEY_evalbytes 58
-#define KEY_exec 59
-#define KEY_exists 60
-#define KEY_exit 61
-#define KEY_exp 62
-#define KEY_fc 63
-#define KEY_fcntl 64
-#define KEY_fileno 65
-#define KEY_flock 66
-#define KEY_for 67
-#define KEY_foreach 68
-#define KEY_fork 69
-#define KEY_format 70
-#define KEY_formline 71
-#define KEY_ge 72
-#define KEY_getc 73
-#define KEY_getgrent 74
-#define KEY_getgrgid 75
-#define KEY_getgrnam 76
-#define KEY_gethostbyaddr 77
-#define KEY_gethostbyname 78
-#define KEY_gethostent 79
-#define KEY_getlogin 80
-#define KEY_getnetbyaddr 81
-#define KEY_getnetbyname 82
-#define KEY_getnetent 83
-#define KEY_getpeername 84
-#define KEY_getpgrp 85
-#define KEY_getppid 86
-#define KEY_getpriority 87
-#define KEY_getprotobyname 88
-#define KEY_getprotobynumber 89
-#define KEY_getprotoent 90
-#define KEY_getpwent 91
-#define KEY_getpwnam 92
-#define KEY_getpwuid 93
-#define KEY_getservbyname 94
-#define KEY_getservbyport 95
-#define KEY_getservent 96
-#define KEY_getsockname 97
-#define KEY_getsockopt 98
-#define KEY_given 99
-#define KEY_glob 100
-#define KEY_gmtime 101
-#define KEY_goto 102
-#define KEY_grep 103
-#define KEY_gt 104
-#define KEY_hex 105
-#define KEY_if 106
-#define KEY_index 107
-#define KEY_int 108
-#define KEY_ioctl 109
-#define KEY_isa 110
-#define KEY_join 111
-#define KEY_keys 112
-#define KEY_kill 113
-#define KEY_last 114
-#define KEY_lc 115
-#define KEY_lcfirst 116
-#define KEY_le 117
-#define KEY_length 118
-#define KEY_link 119
-#define KEY_listen 120
-#define KEY_local 121
-#define KEY_localtime 122
-#define KEY_lock 123
-#define KEY_log 124
-#define KEY_lstat 125
-#define KEY_lt 126
-#define KEY_m 127
-#define KEY_map 128
-#define KEY_mkdir 129
-#define KEY_msgctl 130
-#define KEY_msgget 131
-#define KEY_msgrcv 132
-#define KEY_msgsnd 133
-#define KEY_my 134
-#define KEY_ne 135
-#define KEY_next 136
-#define KEY_no 137
-#define KEY_not 138
-#define KEY_oct 139
-#define KEY_open 140
-#define KEY_opendir 141
-#define KEY_or 142
-#define KEY_ord 143
-#define KEY_our 144
-#define KEY_pack 145
-#define KEY_package 146
-#define KEY_pipe 147
-#define KEY_pop 148
-#define KEY_pos 149
-#define KEY_print 150
-#define KEY_printf 151
-#define KEY_prototype 152
-#define KEY_push 153
-#define KEY_q 154
-#define KEY_qq 155
-#define KEY_qr 156
-#define KEY_quotemeta 157
-#define KEY_qw 158
-#define KEY_qx 159
-#define KEY_rand 160
-#define KEY_read 161
-#define KEY_readdir 162
-#define KEY_readline 163
-#define KEY_readlink 164
-#define KEY_readpipe 165
-#define KEY_recv 166
-#define KEY_redo 167
-#define KEY_ref 168
-#define KEY_rename 169
-#define KEY_require 170
-#define KEY_reset 171
-#define KEY_return 172
-#define KEY_reverse 173
-#define KEY_rewinddir 174
-#define KEY_rindex 175
-#define KEY_rmdir 176
-#define KEY_s 177
-#define KEY_say 178
-#define KEY_scalar 179
-#define KEY_seek 180
-#define KEY_seekdir 181
-#define KEY_select 182
-#define KEY_semctl 183
-#define KEY_semget 184
-#define KEY_semop 185
-#define KEY_send 186
-#define KEY_setgrent 187
-#define KEY_sethostent 188
-#define KEY_setnetent 189
-#define KEY_setpgrp 190
-#define KEY_setpriority 191
-#define KEY_setprotoent 192
-#define KEY_setpwent 193
-#define KEY_setservent 194
-#define KEY_setsockopt 195
-#define KEY_shift 196
-#define KEY_shmctl 197
-#define KEY_shmget 198
-#define KEY_shmread 199
-#define KEY_shmwrite 200
-#define KEY_shutdown 201
-#define KEY_sin 202
-#define KEY_sleep 203
-#define KEY_socket 204
-#define KEY_socketpair 205
-#define KEY_sort 206
-#define KEY_splice 207
-#define KEY_split 208
-#define KEY_sprintf 209
-#define KEY_sqrt 210
-#define KEY_srand 211
-#define KEY_stat 212
-#define KEY_state 213
-#define KEY_study 214
-#define KEY_sub 215
-#define KEY_substr 216
-#define KEY_symlink 217
-#define KEY_syscall 218
-#define KEY_sysopen 219
-#define KEY_sysread 220
-#define KEY_sysseek 221
-#define KEY_system 222
-#define KEY_syswrite 223
-#define KEY_tell 224
-#define KEY_telldir 225
-#define KEY_tie 226
-#define KEY_tied 227
-#define KEY_time 228
-#define KEY_times 229
-#define KEY_tr 230
-#define KEY_truncate 231
-#define KEY_uc 232
-#define KEY_ucfirst 233
-#define KEY_umask 234
-#define KEY_undef 235
-#define KEY_unless 236
-#define KEY_unlink 237
-#define KEY_unpack 238
-#define KEY_unshift 239
-#define KEY_untie 240
-#define KEY_until 241
-#define KEY_use 242
-#define KEY_utime 243
-#define KEY_values 244
-#define KEY_vec 245
-#define KEY_wait 246
-#define KEY_waitpid 247
-#define KEY_wantarray 248
-#define KEY_warn 249
-#define KEY_when 250
-#define KEY_while 251
-#define KEY_write 252
-#define KEY_x 253
-#define KEY_xor 254
-#define KEY_y 255
+#define KEY_catch 24
+#define KEY_chdir 25
+#define KEY_chmod 26
+#define KEY_chomp 27
+#define KEY_chop 28
+#define KEY_chown 29
+#define KEY_chr 30
+#define KEY_chroot 31
+#define KEY_close 32
+#define KEY_closedir 33
+#define KEY_cmp 34
+#define KEY_connect 35
+#define KEY_continue 36
+#define KEY_cos 37
+#define KEY_crypt 38
+#define KEY_dbmclose 39
+#define KEY_dbmopen 40
+#define KEY_default 41
+#define KEY_defined 42
+#define KEY_delete 43
+#define KEY_die 44
+#define KEY_do 45
+#define KEY_dump 46
+#define KEY_each 47
+#define KEY_else 48
+#define KEY_elsif 49
+#define KEY_endgrent 50
+#define KEY_endhostent 51
+#define KEY_endnetent 52
+#define KEY_endprotoent 53
+#define KEY_endpwent 54
+#define KEY_endservent 55
+#define KEY_eof 56
+#define KEY_eq 57
+#define KEY_eval 58
+#define KEY_evalbytes 59
+#define KEY_exec 60
+#define KEY_exists 61
+#define KEY_exit 62
+#define KEY_exp 63
+#define KEY_fc 64
+#define KEY_fcntl 65
+#define KEY_fileno 66
+#define KEY_flock 67
+#define KEY_for 68
+#define KEY_foreach 69
+#define KEY_fork 70
+#define KEY_format 71
+#define KEY_formline 72
+#define KEY_ge 73
+#define KEY_getc 74
+#define KEY_getgrent 75
+#define KEY_getgrgid 76
+#define KEY_getgrnam 77
+#define KEY_gethostbyaddr 78
+#define KEY_gethostbyname 79
+#define KEY_gethostent 80
+#define KEY_getlogin 81
+#define KEY_getnetbyaddr 82
+#define KEY_getnetbyname 83
+#define KEY_getnetent 84
+#define KEY_getpeername 85
+#define KEY_getpgrp 86
+#define KEY_getppid 87
+#define KEY_getpriority 88
+#define KEY_getprotobyname 89
+#define KEY_getprotobynumber 90
+#define KEY_getprotoent 91
+#define KEY_getpwent 92
+#define KEY_getpwnam 93
+#define KEY_getpwuid 94
+#define KEY_getservbyname 95
+#define KEY_getservbyport 96
+#define KEY_getservent 97
+#define KEY_getsockname 98
+#define KEY_getsockopt 99
+#define KEY_given 100
+#define KEY_glob 101
+#define KEY_gmtime 102
+#define KEY_goto 103
+#define KEY_grep 104
+#define KEY_gt 105
+#define KEY_hex 106
+#define KEY_if 107
+#define KEY_index 108
+#define KEY_int 109
+#define KEY_ioctl 110
+#define KEY_isa 111
+#define KEY_join 112
+#define KEY_keys 113
+#define KEY_kill 114
+#define KEY_last 115
+#define KEY_lc 116
+#define KEY_lcfirst 117
+#define KEY_le 118
+#define KEY_length 119
+#define KEY_link 120
+#define KEY_listen 121
+#define KEY_local 122
+#define KEY_localtime 123
+#define KEY_lock 124
+#define KEY_log 125
+#define KEY_lstat 126
+#define KEY_lt 127
+#define KEY_m 128
+#define KEY_map 129
+#define KEY_mkdir 130
+#define KEY_msgctl 131
+#define KEY_msgget 132
+#define KEY_msgrcv 133
+#define KEY_msgsnd 134
+#define KEY_my 135
+#define KEY_ne 136
+#define KEY_next 137
+#define KEY_no 138
+#define KEY_not 139
+#define KEY_oct 140
+#define KEY_open 141
+#define KEY_opendir 142
+#define KEY_or 143
+#define KEY_ord 144
+#define KEY_our 145
+#define KEY_pack 146
+#define KEY_package 147
+#define KEY_pipe 148
+#define KEY_pop 149
+#define KEY_pos 150
+#define KEY_print 151
+#define KEY_printf 152
+#define KEY_prototype 153
+#define KEY_push 154
+#define KEY_q 155
+#define KEY_qq 156
+#define KEY_qr 157
+#define KEY_quotemeta 158
+#define KEY_qw 159
+#define KEY_qx 160
+#define KEY_rand 161
+#define KEY_read 162
+#define KEY_readdir 163
+#define KEY_readline 164
+#define KEY_readlink 165
+#define KEY_readpipe 166
+#define KEY_recv 167
+#define KEY_redo 168
+#define KEY_ref 169
+#define KEY_rename 170
+#define KEY_require 171
+#define KEY_reset 172
+#define KEY_return 173
+#define KEY_reverse 174
+#define KEY_rewinddir 175
+#define KEY_rindex 176
+#define KEY_rmdir 177
+#define KEY_s 178
+#define KEY_say 179
+#define KEY_scalar 180
+#define KEY_seek 181
+#define KEY_seekdir 182
+#define KEY_select 183
+#define KEY_semctl 184
+#define KEY_semget 185
+#define KEY_semop 186
+#define KEY_send 187
+#define KEY_setgrent 188
+#define KEY_sethostent 189
+#define KEY_setnetent 190
+#define KEY_setpgrp 191
+#define KEY_setpriority 192
+#define KEY_setprotoent 193
+#define KEY_setpwent 194
+#define KEY_setservent 195
+#define KEY_setsockopt 196
+#define KEY_shift 197
+#define KEY_shmctl 198
+#define KEY_shmget 199
+#define KEY_shmread 200
+#define KEY_shmwrite 201
+#define KEY_shutdown 202
+#define KEY_sin 203
+#define KEY_sleep 204
+#define KEY_socket 205
+#define KEY_socketpair 206
+#define KEY_sort 207
+#define KEY_splice 208
+#define KEY_split 209
+#define KEY_sprintf 210
+#define KEY_sqrt 211
+#define KEY_srand 212
+#define KEY_stat 213
+#define KEY_state 214
+#define KEY_study 215
+#define KEY_sub 216
+#define KEY_substr 217
+#define KEY_symlink 218
+#define KEY_syscall 219
+#define KEY_sysopen 220
+#define KEY_sysread 221
+#define KEY_sysseek 222
+#define KEY_system 223
+#define KEY_syswrite 224
+#define KEY_tell 225
+#define KEY_telldir 226
+#define KEY_tie 227
+#define KEY_tied 228
+#define KEY_time 229
+#define KEY_times 230
+#define KEY_tr 231
+#define KEY_try 232
+#define KEY_truncate 233
+#define KEY_uc 234
+#define KEY_ucfirst 235
+#define KEY_umask 236
+#define KEY_undef 237
+#define KEY_unless 238
+#define KEY_unlink 239
+#define KEY_unpack 240
+#define KEY_unshift 241
+#define KEY_untie 242
+#define KEY_until 243
+#define KEY_use 244
+#define KEY_utime 245
+#define KEY_values 246
+#define KEY_vec 247
+#define KEY_wait 248
+#define KEY_waitpid 249
+#define KEY_wantarray 250
+#define KEY_warn 251
+#define KEY_when 252
+#define KEY_while 253
+#define KEY_write 254
+#define KEY_x 255
+#define KEY_xor 256
+#define KEY_y 257
/* Generated from:
- * f77998a5bc995c1b42d3d080de227ef5f11638bcd329367431d8f193aef2d3cc regen/keywords.pl
+ * 3a4f2004642b00b871c01cbdc018f6ca5ead6b4e0b2b184120c60b0b62a229dd regen/keywords.pl
* ex: set ro: */
diff --git a/Master/tlpkg/tlperl/lib/CORE/libperl532.a b/Master/tlpkg/tlperl/lib/CORE/libperl534.a
index 7b18a3a6345..d9bc0ff272c 100644..100755
--- a/Master/tlpkg/tlperl/lib/CORE/libperl532.a
+++ b/Master/tlpkg/tlperl/lib/CORE/libperl534.a
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/CORE/metaconfig.h b/Master/tlpkg/tlperl/lib/CORE/metaconfig.h
index baba5eac687..ae0093afd42 100644
--- a/Master/tlpkg/tlperl/lib/CORE/metaconfig.h
+++ b/Master/tlpkg/tlperl/lib/CORE/metaconfig.h
@@ -14,4 +14,6 @@
* they should be removed from here.
*
* HAS_WCRTOMB
+ * GETENV_PRESERVES_OTHER_THREAD
+ *
*/
diff --git a/Master/tlpkg/tlperl/lib/CORE/mg.h b/Master/tlpkg/tlperl/lib/CORE/mg.h
index 034fd7eaf05..a25641d10c1 100644
--- a/Master/tlpkg/tlperl/lib/CORE/mg.h
+++ b/Master/tlpkg/tlperl/lib/CORE/mg.h
@@ -12,10 +12,10 @@ struct mgvtbl {
int (*svt_get) (pTHX_ SV *sv, MAGIC* mg);
int (*svt_set) (pTHX_ SV *sv, MAGIC* mg);
U32 (*svt_len) (pTHX_ SV *sv, MAGIC* mg);
- int (*svt_clear)(pTHX_ SV *sv, MAGIC* mg);
+ int (*svt_clear) (pTHX_ SV *sv, MAGIC* mg);
int (*svt_free) (pTHX_ SV *sv, MAGIC* mg);
int (*svt_copy) (pTHX_ SV *sv, MAGIC* mg,
- SV *nsv, const char *name, I32 namlen);
+ SV *nsv, const char *name, I32 namlen);
int (*svt_dup) (pTHX_ MAGIC *mg, CLONE_PARAMS *param);
int (*svt_local)(pTHX_ SV *nsv, MAGIC *mg);
};
@@ -46,15 +46,24 @@ struct magic {
#define MgTAINTEDDIR_on(mg) (mg->mg_flags |= MGf_TAINTEDDIR)
#define MgTAINTEDDIR_off(mg) (mg->mg_flags &= ~MGf_TAINTEDDIR)
+/* Extracts the SV stored in mg, or NULL. */
+#define MgSV(mg) (((int)((mg)->mg_len) == HEf_SVKEY) ? \
+ MUTABLE_SV((mg)->mg_ptr) : \
+ NULL)
+
+/* If mg contains an SV, these extract the PV stored in that SV;
+ otherwise, these extract the mg's mg_ptr/mg_len.
+ These do NOT account for the SV's UTF8 flag, so handle with care.
+*/
#define MgPV(mg,lp) ((((int)(lp = (mg)->mg_len)) == HEf_SVKEY) ? \
- SvPV(MUTABLE_SV((mg)->mg_ptr),lp) : \
- (mg)->mg_ptr)
+ SvPV(MUTABLE_SV((mg)->mg_ptr),lp) : \
+ (mg)->mg_ptr)
#define MgPV_const(mg,lp) ((((int)(lp = (mg)->mg_len)) == HEf_SVKEY) ? \
- SvPV_const(MUTABLE_SV((mg)->mg_ptr),lp) : \
- (const char*)(mg)->mg_ptr)
+ SvPV_const(MUTABLE_SV((mg)->mg_ptr),lp) : \
+ (const char*)(mg)->mg_ptr)
#define MgPV_nolen_const(mg) (((((int)(mg)->mg_len)) == HEf_SVKEY) ? \
- SvPV_nolen_const(MUTABLE_SV((mg)->mg_ptr)) : \
- (const char*)(mg)->mg_ptr)
+ SvPV_nolen_const(MUTABLE_SV((mg)->mg_ptr)) : \
+ (const char*)(mg)->mg_ptr)
#define SvTIED_mg(sv,how) (SvRMAGICAL(sv) ? mg_find((sv),(how)) : NULL)
#define SvTIED_obj(sv,mg) \
@@ -66,11 +75,11 @@ struct magic {
# define MgBYTEPOS_set(mg,sv,pv,off) ( \
assert_((mg)->mg_type == PERL_MAGIC_regex_global) \
SvPOK(sv) && (!SvGMAGICAL(sv) || sv_only_taint_gmagic(sv)) \
- ? (mg)->mg_len = (off), (mg)->mg_flags |= MGf_BYTES \
- : ((mg)->mg_len = DO_UTF8(sv) \
- ? (SSize_t)utf8_length((U8 *)(pv), (U8 *)(pv)+(off)) \
- : (SSize_t)(off), \
- (mg)->mg_flags &= ~MGf_BYTES))
+ ? (mg)->mg_len = (off), (mg)->mg_flags |= MGf_BYTES \
+ : ((mg)->mg_len = DO_UTF8(sv) \
+ ? (SSize_t)utf8_length((U8 *)(pv), (U8 *)(pv)+(off)) \
+ : (SSize_t)(off), \
+ (mg)->mg_flags &= ~MGf_BYTES))
#endif
#define whichsig(pv) whichsig_pv(pv)
diff --git a/Master/tlpkg/tlperl/lib/CORE/mg_data.h b/Master/tlpkg/tlperl/lib/CORE/mg_data.h
index 092ecfcfbd3..446400c1e97 100644
--- a/Master/tlpkg/tlperl/lib/CORE/mg_data.h
+++ b/Master/tlpkg/tlperl/lib/CORE/mg_data.h
@@ -1,3 +1,12 @@
+/* ..\mg_data.h:
+ * THIS FILE IS AUTO-GENERATED DURING THE BUILD by: ..\generate_uudmap.exe
+ *
+ * These values will populate PL_magic_data[]: this is an array of
+ * per-magic U8 values containing an index into PL_magic_vtables[]
+ * plus two flags:
+ * PERL_MAGIC_READONLY_ACCEPTABLE
+ * PERL_MAGIC_VALUE_MAGIC
+*/
{
/* sv '\0' Special scalar variable */
want_vtbl_sv | PERL_MAGIC_READONLY_ACCEPTABLE,
diff --git a/Master/tlpkg/tlperl/lib/CORE/mg_vtable.h b/Master/tlpkg/tlperl/lib/CORE/mg_vtable.h
index e4f3f3889dd..e5c8cba37c9 100644
--- a/Master/tlpkg/tlperl/lib/CORE/mg_vtable.h
+++ b/Master/tlpkg/tlperl/lib/CORE/mg_vtable.h
@@ -158,7 +158,7 @@ EXT_MGVTBL PL_magic_vtables[magic_vtable_max] = {
{ 0, 0, 0, 0, Perl_magic_killbackrefs, 0, 0, 0 },
{ 0, 0, 0, 0, 0, Perl_magic_copycallchecker, 0, 0 },
#ifdef USE_LOCALE_COLLATE
- { 0, Perl_magic_setcollxfrm, 0, 0, 0, 0, 0, 0 },
+ { 0, Perl_magic_setcollxfrm, 0, 0, Perl_magic_freecollxfrm, 0, 0, 0 },
#else
{ 0, 0, 0, 0, 0, 0, 0, 0 },
#endif
@@ -172,7 +172,7 @@ EXT_MGVTBL PL_magic_vtables[magic_vtable_max] = {
{ 0, Perl_magic_setisa, 0, Perl_magic_clearisa, 0, 0, 0, 0 },
{ 0, Perl_magic_setisa, 0, 0, 0, 0, 0, 0 },
{ 0, Perl_magic_setlvref, 0, 0, 0, 0, 0, 0 },
- { 0, Perl_magic_setmglob, 0, 0, 0, 0, 0, 0 },
+ { 0, Perl_magic_setmglob, 0, 0, Perl_magic_freemglob, 0, 0, 0 },
{ Perl_magic_getnkeys, Perl_magic_setnkeys, 0, 0, 0, 0, 0, 0 },
{ 0, Perl_magic_setnonelem, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, Perl_magic_freeovrld, 0, 0, 0 },
@@ -190,7 +190,7 @@ EXT_MGVTBL PL_magic_vtables[magic_vtable_max] = {
{ Perl_magic_getsubstr, Perl_magic_setsubstr, 0, 0, 0, 0, 0, 0 },
{ Perl_magic_get, Perl_magic_set, 0, 0, 0, 0, 0, 0 },
{ Perl_magic_gettaint, Perl_magic_settaint, 0, 0, 0, 0, 0, 0 },
- { 0, Perl_magic_setutf8, 0, 0, 0, 0, 0, 0 },
+ { 0, Perl_magic_setutf8, 0, 0, Perl_magic_freeutf8, 0, 0, 0 },
{ Perl_magic_getuvar, Perl_magic_setuvar, 0, 0, 0, 0, 0, 0 },
{ Perl_magic_getvec, Perl_magic_setvec, 0, 0, 0, 0, 0, 0 }
};
diff --git a/Master/tlpkg/tlperl/lib/CORE/op.h b/Master/tlpkg/tlperl/lib/CORE/op.h
index b9f6da82c9d..cd3926ddc56 100644
--- a/Master/tlpkg/tlperl/lib/CORE/op.h
+++ b/Master/tlpkg/tlperl/lib/CORE/op.h
@@ -65,19 +65,19 @@ typedef PERL_BITFIELD16 Optype;
/* for efficiency, requires OPf_WANT_VOID == G_VOID etc */
#define OP_GIMME(op,dfl) \
- (((op)->op_flags & OPf_WANT) ? ((op)->op_flags & OPf_WANT) : dfl)
+ (((op)->op_flags & OPf_WANT) ? ((op)->op_flags & OPf_WANT) : dfl)
#define OP_GIMME_REVERSE(flags) ((flags) & G_WANT)
/*
-=head1 "Gimme" Values
+=for apidoc_section $callback
=for apidoc Amn|U32|GIMME_V
The XSUB-writer's equivalent to Perl's C<wantarray>. Returns C<G_VOID>,
C<G_SCALAR> or C<G_ARRAY> for void, scalar or list context,
respectively. See L<perlcall> for a usage example.
-=for apidoc Amn|U32|GIMME
+=for apidoc AmnD|U32|GIMME
A backward-compatible version of C<GIMME_V> which can only return
C<G_SCALAR> or C<G_ARRAY>; in a void context, it returns C<G_SCALAR>.
Deprecated. Use C<GIMME_V> instead.
@@ -95,9 +95,9 @@ Deprecated. Use C<GIMME_V> instead.
#define OPf_WANT_LIST 3 /* Want list of any length */
#define OPf_KIDS 4 /* There is a firstborn child. */
#define OPf_PARENS 8 /* This operator was parenthesized. */
- /* (Or block needs explicit scope entry.) */
+ /* (Or block needs explicit scope entry.) */
#define OPf_REF 16 /* Certified reference. */
- /* (Return container, not containee). */
+ /* (Return container, not containee). */
#define OPf_MOD 32 /* Will modify (lvalue). */
#define OPf_STACKED 64 /* Some arg is arriving on the stack. */
@@ -106,43 +106,43 @@ Deprecated. Use C<GIMME_V> instead.
*/
#define OPf_SPECIAL 128 /* Do something weird for this op: */
- /* On local LVAL, don't init local value. */
- /* On OP_SORT, subroutine is inlined. */
- /* On OP_NOT, inversion was implicit. */
- /* On OP_LEAVE, don't restore curpm, e.g.
+ /* On local LVAL, don't init local value. */
+ /* On OP_SORT, subroutine is inlined. */
+ /* On OP_NOT, inversion was implicit. */
+ /* On OP_LEAVE, don't restore curpm, e.g.
* /(...)/ while ...>; */
- /* On truncate, we truncate filehandle */
- /* On control verbs, we saw no label */
- /* On flipflop, we saw ... instead of .. */
- /* On UNOPs, saw bare parens, e.g. eof(). */
- /* On OP_CHDIR, handle (or bare parens) */
- /* On OP_NULL, saw a "do". */
- /* On OP_EXISTS, treat av as av, not avhv. */
- /* On OP_(ENTER|LEAVE)EVAL, don't clear $@ */
- /* On regcomp, "use re 'eval'" was in scope */
- /* On RV2[ACGHS]V, don't create GV--in
- defined()*/
- /* On OP_DBSTATE, indicates breakpoint
- * (runtime property) */
- /* On OP_REQUIRE, was seen as CORE::require */
- /* On OP_(ENTER|LEAVE)WHEN, there's
- no condition */
- /* On OP_SMARTMATCH, an implicit smartmatch */
- /* On OP_ANONHASH and OP_ANONLIST, create a
- reference to the new anon hash or array */
- /* On OP_HELEM, OP_MULTIDEREF and OP_HSLICE,
+ /* On truncate, we truncate filehandle */
+ /* On control verbs, we saw no label */
+ /* On flipflop, we saw ... instead of .. */
+ /* On UNOPs, saw bare parens, e.g. eof(). */
+ /* On OP_CHDIR, handle (or bare parens) */
+ /* On OP_NULL, saw a "do". */
+ /* On OP_EXISTS, treat av as av, not avhv. */
+ /* On OP_(ENTER|LEAVE)EVAL, don't clear $@ */
+ /* On regcomp, "use re 'eval'" was in scope */
+ /* On RV2[ACGHS]V, don't create GV--in
+ defined()*/
+ /* On OP_DBSTATE, indicates breakpoint
+ * (runtime property) */
+ /* On OP_REQUIRE, was seen as CORE::require */
+ /* On OP_(ENTER|LEAVE)WHEN, there's
+ no condition */
+ /* On OP_SMARTMATCH, an implicit smartmatch */
+ /* On OP_ANONHASH and OP_ANONLIST, create a
+ reference to the new anon hash or array */
+ /* On OP_HELEM, OP_MULTIDEREF and OP_HSLICE,
localization will be followed by assignment,
so do not wipe the target if it is special
(e.g. a glob or a magic SV) */
- /* On OP_MATCH, OP_SUBST & OP_TRANS, the
- operand of a logical or conditional
- that was optimised away, so it should
- not be bound via =~ */
- /* On OP_CONST, from a constant CV */
- /* On OP_GLOB, two meanings:
- - Before ck_glob, called as CORE::glob
- - After ck_glob, use Perl glob function
- */
+ /* On OP_MATCH, OP_SUBST & OP_TRANS, the
+ operand of a logical or conditional
+ that was optimised away, so it should
+ not be bound via =~ */
+ /* On OP_CONST, from a constant CV */
+ /* On OP_GLOB, two meanings:
+ - Before ck_glob, called as CORE::glob
+ - After ck_glob, use Perl glob function
+ */
/* On OP_PADRANGE, push @_ */
/* On OP_DUMP, has no label */
/* On OP_UNSTACK, in a C-style for loop */
@@ -158,11 +158,11 @@ Deprecated. Use C<GIMME_V> instead.
#if !defined(PERL_CORE) && !defined(PERL_EXT)
# define GIMME \
- (PL_op->op_flags & OPf_WANT \
- ? ((PL_op->op_flags & OPf_WANT) == OPf_WANT_LIST \
- ? G_ARRAY \
- : G_SCALAR) \
- : dowantarray())
+ (PL_op->op_flags & OPf_WANT \
+ ? ((PL_op->op_flags & OPf_WANT) == OPf_WANT_LIST \
+ ? G_ARRAY \
+ : G_SCALAR) \
+ : dowantarray())
#endif
@@ -223,6 +223,12 @@ struct binop {
struct logop {
BASEOP
OP * op_first;
+
+ /* Note that op->op_other is the *next* op in execution order of the
+ * alternate branch, not the root of the subtree. I.e. imagine it being
+ * called ->op_otherfirst.
+ * To find the structural subtree root (what could be called
+ * ->op_otherroot), use OpSIBLING of ->op_first */
OP * op_other;
};
@@ -259,16 +265,16 @@ struct pmop {
#endif
U32 op_pmflags;
union {
- OP * op_pmreplroot; /* For OP_SUBST */
- PADOFFSET op_pmtargetoff; /* For OP_SPLIT lex ary or thr GV */
- GV * op_pmtargetgv; /* For OP_SPLIT non-threaded GV */
+ OP * op_pmreplroot; /* For OP_SUBST */
+ PADOFFSET op_pmtargetoff; /* For OP_SPLIT lex ary or thr GV */
+ GV * op_pmtargetgv; /* For OP_SPLIT non-threaded GV */
} op_pmreplrootu;
union {
- OP * op_pmreplstart; /* Only used in OP_SUBST */
+ OP * op_pmreplstart; /* Only used in OP_SUBST */
#ifdef USE_ITHREADS
- PADOFFSET op_pmstashoff; /* Only used in OP_MATCH, with PMf_ONCE set */
+ PADOFFSET op_pmstashoff; /* Only used in OP_MATCH, with PMf_ONCE set */
#else
- HV * op_pmstash;
+ HV * op_pmstash;
#endif
} op_pmstashstartu;
OP * op_code_list; /* list of (?{}) code blocks */
@@ -276,7 +282,7 @@ struct pmop {
#ifdef USE_ITHREADS
#define PM_GETRE(o) (SvTYPE(PL_regex_pad[(o)->op_pmoffset]) == SVt_REGEXP \
- ? (REGEXP*)(PL_regex_pad[(o)->op_pmoffset]) : NULL)
+ ? (REGEXP*)(PL_regex_pad[(o)->op_pmoffset]) : NULL)
/* The assignment is just to enforce type safety (or at least get a warning).
*/
/* With first class regexps not via a reference one needs to assign
@@ -288,7 +294,7 @@ struct pmop {
#define PM_SETRE(o,r) STMT_START { \
REGEXP *const _pm_setre = (r); \
assert(_pm_setre); \
- PL_regex_pad[(o)->op_pmoffset] = MUTABLE_SV(_pm_setre); \
+ PL_regex_pad[(o)->op_pmoffset] = MUTABLE_SV(_pm_setre); \
} STMT_END
#else
#define PM_GETRE(o) ((o)->op_pmregexp)
@@ -390,16 +396,16 @@ struct pmop {
? PL_stashpad[(o)->op_pmstashstartu.op_pmstashoff] \
: NULL)
# define PmopSTASH_set(o,hv) \
- (assert_((o)->op_pmflags & PMf_ONCE) \
- (o)->op_pmstashstartu.op_pmstashoff = \
- (hv) ? alloccopstash(hv) : 0)
+ (assert_((o)->op_pmflags & PMf_ONCE) \
+ (o)->op_pmstashstartu.op_pmstashoff = \
+ (hv) ? alloccopstash(hv) : 0)
#else
# define PmopSTASH(o) \
(((o)->op_pmflags & PMf_ONCE) ? (o)->op_pmstashstartu.op_pmstash : NULL)
-# if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+# if defined (DEBUGGING) && defined(PERL_USE_GCC_BRACE_GROUPS)
# define PmopSTASH_set(o,hv) ({ \
- assert((o)->op_pmflags & PMf_ONCE); \
- ((o)->op_pmstashstartu.op_pmstash = (hv)); \
+ assert((o)->op_pmflags & PMf_ONCE); \
+ ((o)->op_pmstashstartu.op_pmstash = (hv)); \
})
# else
# define PmopSTASH_set(o,hv) ((o)->op_pmstashstartu.op_pmstash = (hv))
@@ -506,12 +512,12 @@ typedef enum {
# ifndef PERL_CORE
# define IS_PADGV(v) (v && isGV(v))
# define IS_PADCONST(v) \
- (v && (SvREADONLY(v) || (SvIsCOW(v) && !SvLEN(v))))
+ (v && (SvREADONLY(v) || (SvIsCOW(v) && !SvLEN(v))))
# endif
# define cSVOPx_sv(v) (cSVOPx(v)->op_sv \
- ? cSVOPx(v)->op_sv : PAD_SVl((v)->op_targ))
+ ? cSVOPx(v)->op_sv : PAD_SVl((v)->op_targ))
# define cSVOPx_svp(v) (cSVOPx(v)->op_sv \
- ? &cSVOPx(v)->op_sv : &PAD_SVl((v)->op_targ))
+ ? &cSVOPx(v)->op_sv : &PAD_SVl((v)->op_targ))
# define cMETHOPx_rclass(v) PAD_SVl(cMETHOPx(v)->op_rclass_targ)
#else
# define cGVOPx_gv(o) ((GV*)cSVOPx(o)->op_sv)
@@ -621,9 +627,9 @@ typedef enum {
#define PERL_LOADMOD_DENY 0x1 /* no Module */
#define PERL_LOADMOD_NOIMPORT 0x2 /* use Module () */
#define PERL_LOADMOD_IMPORT_OPS 0x4 /* import arguments
- are passed as a sin-
- gle op tree, not a
- list of SVs */
+ are passed as a sin-
+ gle op tree, not a
+ list of SVs */
#if defined(PERL_IN_PERLY_C) || defined(PERL_IN_OP_C) || defined(PERL_IN_TOKE_C)
#define ref(o, type) doref(o, type, TRUE)
@@ -639,7 +645,7 @@ typedef struct {
/*
-=head1 Optree Manipulation Functions
+=for apidoc_section $optree_manipulation
=for apidoc Am|OP*|LINKLIST|OP *o
Given the root of an optree, link the tree in execution order using the
@@ -668,9 +674,9 @@ least an C<UNOP>.
#endif
#define NewOp(m,var,c,type) \
- (var = (type *) Perl_Slab_Alloc(aTHX_ c*sizeof(type)))
+ (var = (type *) Perl_Slab_Alloc(aTHX_ c*sizeof(type)))
#define NewOpSz(m,var,size) \
- (var = (OP *) Perl_Slab_Alloc(aTHX_ size))
+ (var = (OP *) Perl_Slab_Alloc(aTHX_ size))
#define FreeOp(p) Perl_Slab_Free(aTHX_ p)
/*
@@ -713,31 +719,33 @@ struct opslab {
units) */
# ifdef PERL_DEBUG_READONLY_OPS
bool opslab_readonly;
- U8 opslab_padding; /* padding to ensure that opslab_slots is always */
-# else
- U16 opslab_padding; /* located at an offset with 32-bit alignment */
# endif
OPSLOT opslab_slots; /* slots begin here */
};
# define OPSLOT_HEADER STRUCT_OFFSET(OPSLOT, opslot_op)
-# define OPSLOT_HEADER_P (OPSLOT_HEADER/sizeof(I32 *))
# define OpSLOT(o) (assert_(o->op_slabbed) \
- (OPSLOT *)(((char *)o)-OPSLOT_HEADER))
+ (OPSLOT *)(((char *)o)-OPSLOT_HEADER))
+/* the slab that owns this op */
+# define OpMySLAB(o) \
+ ((OPSLAB*)((char *)((I32**)OpSLOT(o) - OpSLOT(o)->opslot_offset)-STRUCT_OFFSET(struct opslab, opslab_slots)))
/* the first (head) opslab of the chain in which this op is allocated */
# define OpSLAB(o) \
- (((OPSLAB*)( (I32**)OpSLOT(o) - OpSLOT(o)->opslot_offset))->opslab_head)
+ (OpMySLAB(o)->opslab_head)
+/* calculate the slot given the owner slab and an offset */
+#define OpSLOToff(slab, offset) \
+ ((OPSLOT*)(((I32 **)&(slab)->opslab_slots)+(offset)))
# define OpslabREFCNT_dec(slab) \
- (((slab)->opslab_refcnt == 1) \
- ? opslab_free_nopad(slab) \
- : (void)--(slab)->opslab_refcnt)
+ (((slab)->opslab_refcnt == 1) \
+ ? opslab_free_nopad(slab) \
+ : (void)--(slab)->opslab_refcnt)
/* Variant that does not null out the pads */
# define OpslabREFCNT_dec_padok(slab) \
- (((slab)->opslab_refcnt == 1) \
- ? opslab_free(slab) \
- : (void)--(slab)->opslab_refcnt)
+ (((slab)->opslab_refcnt == 1) \
+ ? opslab_free(slab) \
+ : (void)--(slab)->opslab_refcnt)
#endif
struct block_hooks {
@@ -749,7 +757,7 @@ struct block_hooks {
};
/*
-=head1 Compile-time scope hooks
+=for apidoc_section $scope
=for apidoc mx|U32|BhkFLAGS|BHK *hk
Return the BHK's flags.
@@ -795,39 +803,39 @@ preprocessing token; the type of C<arg> depends on C<which>.
#define BhkENABLE(hk, which) \
STMT_START { \
- BhkFLAGS(hk) |= BHKf_ ## which; \
- assert(BhkENTRY(hk, which)); \
+ BhkFLAGS(hk) |= BHKf_ ## which; \
+ assert(BhkENTRY(hk, which)); \
} STMT_END
#define BhkDISABLE(hk, which) \
STMT_START { \
- BhkFLAGS(hk) &= ~(BHKf_ ## which); \
+ BhkFLAGS(hk) &= ~(BHKf_ ## which); \
} STMT_END
#define BhkENTRY_set(hk, which, ptr) \
STMT_START { \
- (hk)->which = ptr; \
- BhkENABLE(hk, which); \
+ (hk)->which = ptr; \
+ BhkENABLE(hk, which); \
} STMT_END
#define CALL_BLOCK_HOOKS(which, arg) \
STMT_START { \
- if (PL_blockhooks) { \
- SSize_t i; \
- for (i = av_tindex(PL_blockhooks); i >= 0; i--) { \
- SV *sv = AvARRAY(PL_blockhooks)[i]; \
- BHK *hk; \
- \
- assert(SvIOK(sv)); \
- if (SvUOK(sv)) \
- hk = INT2PTR(BHK *, SvUVX(sv)); \
- else \
- hk = INT2PTR(BHK *, SvIVX(sv)); \
- \
- if (BhkENTRY(hk, which)) \
- BhkENTRY(hk, which)(aTHX_ arg); \
- } \
- } \
+ if (PL_blockhooks) { \
+ SSize_t i; \
+ for (i = av_top_index(PL_blockhooks); i >= 0; i--) { \
+ SV *sv = AvARRAY(PL_blockhooks)[i]; \
+ BHK *hk; \
+ \
+ assert(SvIOK(sv)); \
+ if (SvUOK(sv)) \
+ hk = INT2PTR(BHK *, SvUVX(sv)); \
+ else \
+ hk = INT2PTR(BHK *, SvIVX(sv)); \
+ \
+ if (BhkENTRY(hk, which)) \
+ BhkENTRY(hk, which)(aTHX_ arg); \
+ } \
+ } \
} STMT_END
/* flags for rv2cv_op_cv */
@@ -835,7 +843,7 @@ preprocessing token; the type of C<arg> depends on C<which>.
#define RV2CVOPCV_MARK_EARLY 0x00000001
#define RV2CVOPCV_RETURN_NAME_GV 0x00000002
#define RV2CVOPCV_RETURN_STUB 0x00000004
-#ifdef PERL_CORE /* behaviour of this flag is subject to change: */
+#if defined(PERL_CORE) || defined(PERL_EXT) /* behaviour of this flag is subject to change: */
# define RV2CVOPCV_MAYBE_NAME_GV 0x00000008
#endif
#define RV2CVOPCV_FLAG_MASK 0x0000000f /* all of the above */
@@ -847,7 +855,7 @@ preprocessing token; the type of C<arg> depends on C<which>.
#define OP_LVALUE_NO_CROAK 1
/*
-=head1 Custom Operators
+=for apidoc_section $custom
=for apidoc Am|U32|XopFLAGS|XOP *xop
Return the XOP's flags.
@@ -857,7 +865,7 @@ Return a member of the XOP structure. C<which> is a cpp token
indicating which entry to return. If the member is not set
this will return a default value. The return type depends
on C<which>. This macro evaluates its arguments more than
-once. If you are using C<Perl_custom_op_xop> to retreive a
+once. If you are using C<Perl_custom_op_xop> to retrieve a
C<XOP *> from a C<OP *>, use the more efficient L</XopENTRYCUSTOM> instead.
=for apidoc Am||XopENTRYCUSTOM|const OP *o|which
@@ -922,8 +930,8 @@ typedef enum {
#define XopENTRY_set(xop, which, to) \
STMT_START { \
- (xop)->which = (to); \
- (xop)->xop_flags |= XOPf_ ## which; \
+ (xop)->which = (to); \
+ (xop)->xop_flags |= XOPf_ ## which; \
} STMT_END
#define XopENTRY(xop, which) \
@@ -935,15 +943,15 @@ typedef enum {
#define XopDISABLE(xop, which) ((xop)->xop_flags &= ~XOPf_ ## which)
#define XopENABLE(xop, which) \
STMT_START { \
- (xop)->xop_flags |= XOPf_ ## which; \
- assert(XopENTRY(xop, which)); \
+ (xop)->xop_flags |= XOPf_ ## which; \
+ assert(XopENTRY(xop, which)); \
} STMT_END
#define Perl_custom_op_xop(x) \
(Perl_custom_op_get_field(x, XOPe_xop_ptr).xop_ptr)
/*
-=head1 Optree Manipulation Functions
+=for apidoc_section $optree_manipulation
=for apidoc Am|const char *|OP_NAME|OP *o
Return the name of the provided OP. For core ops this looks up the name
@@ -1007,13 +1015,13 @@ C<sib> is non-null. For a higher-level interface, see C<L</op_sibling_splice>>.
#define OP_NAME(o) ((o)->op_type == OP_CUSTOM \
? XopENTRYCUSTOM(o, xop_name) \
- : PL_op_name[(o)->op_type])
+ : PL_op_name[(o)->op_type])
#define OP_DESC(o) ((o)->op_type == OP_CUSTOM \
? XopENTRYCUSTOM(o, xop_desc) \
- : PL_op_desc[(o)->op_type])
+ : PL_op_desc[(o)->op_type])
#define OP_CLASS(o) ((o)->op_type == OP_CUSTOM \
- ? XopENTRYCUSTOM(o, xop_class) \
- : (PL_opargs[(o)->op_type] & OA_CLASS_MASK))
+ ? XopENTRYCUSTOM(o, xop_class) \
+ : (PL_opargs[(o)->op_type] & OA_CLASS_MASK))
#define OP_TYPE_IS(o, type) ((o) && (o)->op_type == (type))
#define OP_TYPE_IS_NN(o, type) ((o)->op_type == (type))
@@ -1057,10 +1065,6 @@ C<sib> is non-null. For a higher-level interface, see C<L</op_sibling_splice>>.
#define newATTRSUB(f, o, p, a, b) Perl_newATTRSUB_x(aTHX_ f, o, p, a, b, FALSE)
#define newSUB(f, o, p, b) newATTRSUB((f), (o), (p), NULL, (b))
-/*
-=head1 Hook manipulation
-*/
-
#ifdef USE_ITHREADS
# define OP_CHECK_MUTEX_INIT MUTEX_INIT(&PL_check_mutex)
# define OP_CHECK_MUTEX_LOCK MUTEX_LOCK(&PL_check_mutex)
diff --git a/Master/tlpkg/tlperl/lib/CORE/op_reg_common.h b/Master/tlpkg/tlperl/lib/CORE/op_reg_common.h
index c500aa4180e..e8770e6352e 100644
--- a/Master/tlpkg/tlperl/lib/CORE/op_reg_common.h
+++ b/Master/tlpkg/tlperl/lib/CORE/op_reg_common.h
@@ -137,8 +137,8 @@ get_regex_charset(const U32 flags)
* directly in the #define because doing so confuses regcomp.pl.
* (2**n - 1) is n 1 bits, so the below gets the contiguous bits between the
* beginning and ending shifts */
-#if RXf_PMf_COMPILETIME != (((1 << (_RXf_PMf_SHIFT_COMPILETIME))-1) \
- & (~((1 << RXf_PMf_STD_PMMOD_SHIFT)-1)))
+#if RXf_PMf_COMPILETIME != ((nBIT_MASK(_RXf_PMf_SHIFT_COMPILETIME)) \
+ & (~(nBIT_MASK( RXf_PMf_STD_PMMOD_SHIFT))))
# error RXf_PMf_COMPILETIME is invalid
#endif
diff --git a/Master/tlpkg/tlperl/lib/CORE/opcode.h b/Master/tlpkg/tlperl/lib/CORE/opcode.h
index 195898e4c33..c808bee65c2 100644
--- a/Master/tlpkg/tlperl/lib/CORE/opcode.h
+++ b/Master/tlpkg/tlperl/lib/CORE/opcode.h
@@ -13,7 +13,7 @@
* Any changes made here will be lost!
*/
-#ifndef PERL_GLOBAL_STRUCT_INIT
+#if defined(PERL_CORE) || defined(PERL_EXT)
#define Perl_pp_scalar Perl_pp_null
#define Perl_pp_padany Perl_unimplemented_op
@@ -140,6 +140,9 @@
#define Perl_pp_sgrent Perl_pp_ehostent
#define Perl_pp_egrent Perl_pp_ehostent
#define Perl_pp_custom Perl_unimplemented_op
+
+#endif /* End of if defined(PERL_CORE) || defined(PERL_EXT) */
+
START_EXTERN_C
#ifndef DOINIT
@@ -546,7 +549,11 @@ EXTCONST char* const PL_op_name[] = {
"isa",
"cmpchain_and",
"cmpchain_dup",
- "freed",
+ "entertrycatch",
+ "leavetrycatch",
+ "poptry",
+ "catch",
+ "freed",
};
#endif
@@ -954,25 +961,20 @@ EXTCONST char* const PL_op_desc[] = {
"derived class test",
"comparison chaining",
"comparand shuffling",
- "freed op",
+ "try {block}",
+ "try {block} exit",
+ "pop try",
+ "catch {} block",
+ "freed op",
};
#endif
END_EXTERN_C
-#endif /* !PERL_GLOBAL_STRUCT_INIT */
-
START_EXTERN_C
-#ifdef PERL_GLOBAL_STRUCT_INIT
-# define PERL_PPADDR_INITED
-static const Perl_ppaddr_t Gppaddr[]
-#elif !defined(PERL_GLOBAL_STRUCT)
-# define PERL_PPADDR_INITED
EXT Perl_ppaddr_t PL_ppaddr[] /* or perlvars.h */
-#endif /* PERL_GLOBAL_STRUCT */
-#if (defined(DOINIT) && !defined(PERL_GLOBAL_STRUCT)) || defined(PERL_GLOBAL_STRUCT_INIT)
-# define PERL_PPADDR_INITED
+#if defined(DOINIT)
= {
Perl_pp_null,
Perl_pp_stub,
@@ -1374,21 +1376,16 @@ EXT Perl_ppaddr_t PL_ppaddr[] /* or perlvars.h */
Perl_pp_isa,
Perl_pp_cmpchain_and,
Perl_pp_cmpchain_dup,
+ Perl_pp_entertrycatch,
+ Perl_pp_leavetrycatch,
+ Perl_pp_poptry,
+ Perl_pp_catch,
}
#endif
-#ifdef PERL_PPADDR_INITED
;
-#endif
-#ifdef PERL_GLOBAL_STRUCT_INIT
-# define PERL_CHECK_INITED
-static const Perl_check_t Gcheck[]
-#elif !defined(PERL_GLOBAL_STRUCT)
-# define PERL_CHECK_INITED
EXT Perl_check_t PL_check[] /* or perlvars.h */
-#endif
-#if (defined(DOINIT) && !defined(PERL_GLOBAL_STRUCT)) || defined(PERL_GLOBAL_STRUCT_INIT)
-# define PERL_CHECK_INITED
+#if defined(DOINIT)
= {
Perl_ck_null, /* null */
Perl_ck_null, /* stub */
@@ -1790,13 +1787,13 @@ EXT Perl_check_t PL_check[] /* or perlvars.h */
Perl_ck_isa, /* isa */
Perl_ck_null, /* cmpchain_and */
Perl_ck_null, /* cmpchain_dup */
+ Perl_ck_trycatch, /* entertrycatch */
+ Perl_ck_null, /* leavetrycatch */
+ Perl_ck_null, /* poptry */
+ Perl_ck_null, /* catch */
}
#endif
-#ifdef PERL_CHECK_INITED
;
-#endif /* #ifdef PERL_CHECK_INITED */
-
-#ifndef PERL_GLOBAL_STRUCT_INIT
#ifndef DOINIT
EXTCONST U32 PL_opargs[];
@@ -2202,11 +2199,13 @@ EXTCONST U32 PL_opargs[] = {
0x00000204, /* isa */
0x00000300, /* cmpchain_and */
0x00000100, /* cmpchain_dup */
+ 0x00000300, /* entertrycatch */
+ 0x00000400, /* leavetrycatch */
+ 0x00000400, /* poptry */
+ 0x00000300, /* catch */
};
#endif
-#endif /* !PERL_GLOBAL_STRUCT_INIT */
-
END_EXTERN_C
@@ -2322,9 +2321,7 @@ END_EXTERN_C
#define OPpTRANS_DELETE 0x80
START_EXTERN_C
-#ifndef PERL_GLOBAL_STRUCT_INIT
-
-# ifndef DOINIT
+#ifndef DOINIT
/* data about the flags in op_private */
@@ -2334,7 +2331,7 @@ EXTCONST char PL_op_private_labels[];
EXTCONST I16 PL_op_private_bitfields[];
EXTCONST U8 PL_op_private_valid[];
-# else
+#else
/* PL_op_private_labels[]: the short descriptions of private flags.
@@ -2873,6 +2870,10 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = {
12, /* isa */
0, /* cmpchain_and */
0, /* cmpchain_dup */
+ 0, /* entertrycatch */
+ -1, /* leavetrycatch */
+ -1, /* poptry */
+ 0, /* catch */
};
@@ -2891,7 +2892,7 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = {
*/
EXTCONST U16 PL_op_private_bitdefs[] = {
- 0x0003, /* scalar, prototype, refgen, srefgen, readline, regcmaybe, regcreset, regcomp, substcont, chop, schop, defined, undef, study, preinc, i_preinc, predec, i_predec, postinc, i_postinc, postdec, i_postdec, negate, i_negate, not, complement, ucfirst, lcfirst, uc, lc, quotemeta, aeach, avalues, each, pop, shift, grepstart, mapstart, mapwhile, range, and, or, dor, andassign, orassign, dorassign, argcheck, argdefelem, method, method_named, method_super, method_redir, method_redir_super, entergiven, leavegiven, enterwhen, leavewhen, untie, tied, dbmclose, getsockname, getpeername, lstat, stat, readlink, readdir, telldir, rewinddir, closedir, localtime, alarm, require, dofile, entertry, ghbyname, gnbyname, gpbyname, shostent, snetent, sprotoent, sservent, gpwnam, gpwuid, ggrnam, ggrgid, lock, once, fc, anonconst, cmpchain_and, cmpchain_dup */
+ 0x0003, /* scalar, prototype, refgen, srefgen, readline, regcmaybe, regcreset, regcomp, substcont, chop, schop, defined, undef, study, preinc, i_preinc, predec, i_predec, postinc, i_postinc, postdec, i_postdec, negate, i_negate, not, complement, ucfirst, lcfirst, uc, lc, quotemeta, aeach, avalues, each, pop, shift, grepstart, mapstart, mapwhile, range, and, or, dor, andassign, orassign, dorassign, argcheck, argdefelem, method, method_named, method_super, method_redir, method_redir_super, entergiven, leavegiven, enterwhen, leavewhen, untie, tied, dbmclose, getsockname, getpeername, lstat, stat, readlink, readdir, telldir, rewinddir, closedir, localtime, alarm, require, dofile, entertry, ghbyname, gnbyname, gpbyname, shostent, snetent, sprotoent, sservent, gpwnam, gpwuid, ggrnam, ggrgid, lock, once, fc, anonconst, cmpchain_and, cmpchain_dup, entertrycatch, catch */
0x2fdc, 0x41b9, /* pushmark */
0x00bd, /* wantarray, runcv */
0x0438, 0x1a50, 0x426c, 0x3d28, 0x3505, /* const */
@@ -3369,11 +3370,14 @@ EXTCONST U8 PL_op_private_valid[] = {
/* ISA */ (OPpARG2_MASK),
/* CMPCHAIN_AND */ (OPpARG1_MASK),
/* CMPCHAIN_DUP */ (OPpARG1_MASK),
+ /* ENTERTRYCATCH */ (OPpARG1_MASK),
+ /* LEAVETRYCATCH */ (0),
+ /* POPTRY */ (0),
+ /* CATCH */ (OPpARG1_MASK),
};
-# endif /* !DOINIT */
-#endif /* !PERL_GLOBAL_STRUCT_INIT */
+#endif /* !DOINIT */
END_EXTERN_C
diff --git a/Master/tlpkg/tlperl/lib/CORE/opnames.h b/Master/tlpkg/tlperl/lib/CORE/opnames.h
index 0e325466d15..f6c1552a52a 100644
--- a/Master/tlpkg/tlperl/lib/CORE/opnames.h
+++ b/Master/tlpkg/tlperl/lib/CORE/opnames.h
@@ -414,10 +414,14 @@ typedef enum opcode {
OP_ISA = 397,
OP_CMPCHAIN_AND = 398,
OP_CMPCHAIN_DUP = 399,
+ OP_ENTERTRYCATCH = 400,
+ OP_LEAVETRYCATCH = 401,
+ OP_POPTRY = 402,
+ OP_CATCH = 403,
OP_max
} opcode;
-#define MAXO 400
+#define MAXO 404
#define OP_FREED MAXO
/* the OP_IS_* macros are optimized to a simple range check because
diff --git a/Master/tlpkg/tlperl/lib/CORE/pad.h b/Master/tlpkg/tlperl/lib/CORE/pad.h
index 6b31ace5f28..07c4d868633 100644
--- a/Master/tlpkg/tlperl/lib/CORE/pad.h
+++ b/Master/tlpkg/tlperl/lib/CORE/pad.h
@@ -11,11 +11,6 @@
* variables, op targets and constants.
*/
-/*
-=head1 Pad Data Structures
-*/
-
-
/* offsets within a pad */
typedef SSize_t PADOFFSET; /* signed so that -1 is a valid value */
@@ -28,13 +23,13 @@ typedef SSize_t PADOFFSET; /* signed so that -1 is a valid value */
struct padlist {
SSize_t xpadl_max; /* max index for which array has space */
union {
- PAD ** xpadlarr_alloc; /* Pointer to beginning of array of AVs.
- index 0 is a padnamelist * */
- struct {
- PADNAMELIST * padnl;
- PAD * pad_1; /* this slice of PAD * array always alloced */
- PAD * pad_2; /* maybe unalloced */
- } * xpadlarr_dbg; /* for use with a C debugger only */
+ PAD ** xpadlarr_alloc; /* Pointer to beginning of array of AVs.
+ index 0 is a padnamelist * */
+ struct {
+ PADNAMELIST * padnl;
+ PAD * pad_1; /* this slice of PAD * array always alloced */
+ PAD * pad_2; /* maybe unalloced */
+ } * xpadlarr_dbg; /* for use with a C debugger only */
} xpadl_arr;
U32 xpadl_id; /* Semi-unique ID, shared between clones */
U32 xpadl_outid; /* ID of outer pad */
@@ -63,8 +58,8 @@ struct padnamelist {
char * xpadn_pv; \
HV * xpadn_ourstash; \
union { \
- HV * xpadn_typestash; \
- CV * xpadn_protocv; \
+ HV * xpadn_typestash; \
+ CV * xpadn_protocv; \
} xpadn_type_u; \
U32 xpadn_low; \
U32 xpadn_high; \
@@ -97,8 +92,8 @@ struct padname_with_str {
*/
#define PERL_PADSEQ_INTRO U32_MAX
#define COP_SEQMAX_INC \
- (PL_cop_seqmax++, \
- (void)(PL_cop_seqmax == PERL_PADSEQ_INTRO && PL_cop_seqmax++))
+ (PL_cop_seqmax++, \
+ (void)(PL_cop_seqmax == PERL_PADSEQ_INTRO && PL_cop_seqmax++))
/* B.xs needs these for the benefit of B::Deparse */
@@ -124,9 +119,9 @@ struct padname_with_str {
/* values for the pad_tidy() function */
typedef enum {
- padtidy_SUB, /* tidy up a pad for a sub, */
- padtidy_SUBCLONE, /* a cloned sub, */
- padtidy_FORMAT /* or a format */
+ padtidy_SUB, /* tidy up a pad for a sub, */
+ padtidy_SUBCLONE, /* a cloned sub, */
+ padtidy_FORMAT /* or a format */
} padtidy_type;
/* flags for pad_add_name_pvn. */
@@ -135,7 +130,7 @@ typedef enum {
#define padadd_STATE 0x02 /* state declaration. */
#define padadd_NO_DUP_CHECK 0x04 /* skip warning on dups. */
#define padadd_STALEOK 0x08 /* allow stale lexical in active
- * sub, but only one level up */
+ * sub, but only one level up */
/* ASSERT_CURPAD_LEGAL and ASSERT_CURPAD_ACTIVE respectively determine
* whether PL_comppad and PL_curpad are consistent and whether they have
@@ -147,15 +142,15 @@ typedef enum {
# define ASSERT_CURPAD_LEGAL(label) \
pad_peg(label); \
if (PL_comppad ? (AvARRAY(PL_comppad) != PL_curpad) : (PL_curpad != 0)) \
- Perl_croak(aTHX_ "panic: illegal pad in %s: 0x%" UVxf "[0x%" UVxf "]",\
- label, PTR2UV(PL_comppad), PTR2UV(PL_curpad));
+ Perl_croak(aTHX_ "panic: illegal pad in %s: 0x%" UVxf "[0x%" UVxf "]",\
+ label, PTR2UV(PL_comppad), PTR2UV(PL_curpad));
# define ASSERT_CURPAD_ACTIVE(label) \
pad_peg(label); \
if (!PL_comppad || (AvARRAY(PL_comppad) != PL_curpad)) \
- Perl_croak(aTHX_ "panic: invalid pad in %s: 0x%" UVxf "[0x%" UVxf "]",\
- label, PTR2UV(PL_comppad), PTR2UV(PL_curpad));
+ Perl_croak(aTHX_ "panic: invalid pad in %s: 0x%" UVxf "[0x%" UVxf "]",\
+ label, PTR2UV(PL_comppad), PTR2UV(PL_curpad));
#else
# define ASSERT_CURPAD_LEGAL(label)
# define ASSERT_CURPAD_ACTIVE(label)
@@ -170,7 +165,10 @@ typedef enum {
=for apidoc m|void|SAVEPADSV |PADOFFSET po
Save a pad slot (used to restore after an iteration)
+=cut
+
XXX DAPM it would make more sense to make the arg a PADOFFSET
+
=for apidoc m|void|SAVECLEARSV |SV **svp
Clear the pointed to pad value on scope exit. (i.e. the runtime action of
C<my>)
@@ -234,7 +232,7 @@ Returns the pad name as a mortal SV.
=for apidoc m|bool|PadnameIsOUR|PADNAME * pn
Whether this is an "our" variable.
-=for apidoc m|HV *|PadnameOURSTASH
+=for apidoc m|HV *|PadnameOURSTASH|PADNAME * pn
The stash in which this "our" variable was declared.
=for apidoc m|bool|PadnameOUTER|PADNAME * pn
@@ -315,7 +313,7 @@ Restore the old pad saved into the local variable C<opad> by C<PAD_SAVE_LOCAL()>
#define PadnameLEN(pn) (pn)->xpadn_len
#define PadnameUTF8(pn) 1
#define PadnameSV(pn) \
- newSVpvn_flags(PadnamePV(pn), PadnameLEN(pn), SVs_TEMP|SVf_UTF8)
+ newSVpvn_flags(PadnamePV(pn), PadnameLEN(pn), SVs_TEMP|SVf_UTF8)
#define PadnameFLAGS(pn) (pn)->xpadn_flags
#define PadnameIsOUR(pn) (!!(pn)->xpadn_ourstash)
#define PadnameOURSTASH(pn) (pn)->xpadn_ourstash
@@ -362,43 +360,43 @@ Restore the old pad saved into the local variable C<opad> by C<PAD_SAVE_LOCAL()>
#define PAD_SVl(po) (PL_curpad[po])
#define PAD_BASE_SV(padlist, po) \
- (PadlistARRAY(padlist)[1]) \
- ? AvARRAY(MUTABLE_AV((PadlistARRAY(padlist)[1])))[po] \
- : NULL;
+ (PadlistARRAY(padlist)[1]) \
+ ? AvARRAY(MUTABLE_AV((PadlistARRAY(padlist)[1])))[po] \
+ : NULL;
#define PAD_SET_CUR_NOSAVE(padlist,nth) \
- PL_comppad = (PAD*) (PadlistARRAY(padlist)[nth]); \
- PL_curpad = AvARRAY(PL_comppad); \
- DEBUG_Xv(PerlIO_printf(Perl_debug_log, \
- "Pad 0x%" UVxf "[0x%" UVxf "] set_cur depth=%d\n", \
- PTR2UV(PL_comppad), PTR2UV(PL_curpad), (int)(nth)));
+ PL_comppad = (PAD*) (PadlistARRAY(padlist)[nth]); \
+ PL_curpad = AvARRAY(PL_comppad); \
+ DEBUG_Xv(PerlIO_printf(Perl_debug_log, \
+ "Pad 0x%" UVxf "[0x%" UVxf "] set_cur depth=%d\n", \
+ PTR2UV(PL_comppad), PTR2UV(PL_curpad), (int)(nth)));
#define PAD_SET_CUR(padlist,nth) \
- SAVECOMPPAD(); \
- PAD_SET_CUR_NOSAVE(padlist,nth);
+ SAVECOMPPAD(); \
+ PAD_SET_CUR_NOSAVE(padlist,nth);
#define PAD_SAVE_SETNULLPAD() SAVECOMPPAD(); \
- PL_comppad = NULL; PL_curpad = NULL; \
- DEBUG_Xv(PerlIO_printf(Perl_debug_log, "Pad set_null\n"));
+ PL_comppad = NULL; PL_curpad = NULL; \
+ DEBUG_Xv(PerlIO_printf(Perl_debug_log, "Pad set_null\n"));
#define PAD_SAVE_LOCAL(opad,npad) \
- opad = PL_comppad; \
- PL_comppad = (npad); \
- PL_curpad = PL_comppad ? AvARRAY(PL_comppad) : NULL; \
- DEBUG_Xv(PerlIO_printf(Perl_debug_log, \
- "Pad 0x%" UVxf "[0x%" UVxf "] save_local\n", \
- PTR2UV(PL_comppad), PTR2UV(PL_curpad)));
+ opad = PL_comppad; \
+ PL_comppad = (npad); \
+ PL_curpad = PL_comppad ? AvARRAY(PL_comppad) : NULL; \
+ DEBUG_Xv(PerlIO_printf(Perl_debug_log, \
+ "Pad 0x%" UVxf "[0x%" UVxf "] save_local\n", \
+ PTR2UV(PL_comppad), PTR2UV(PL_curpad)));
#define PAD_RESTORE_LOCAL(opad) \
assert(!opad || !SvIS_FREED(opad)); \
- PL_comppad = opad; \
- PL_curpad = PL_comppad ? AvARRAY(PL_comppad) : NULL; \
- DEBUG_Xv(PerlIO_printf(Perl_debug_log, \
- "Pad 0x%" UVxf "[0x%" UVxf "] restore_local\n", \
- PTR2UV(PL_comppad), PTR2UV(PL_curpad)));
+ PL_comppad = opad; \
+ PL_curpad = PL_comppad ? AvARRAY(PL_comppad) : NULL; \
+ DEBUG_Xv(PerlIO_printf(Perl_debug_log, \
+ "Pad 0x%" UVxf "[0x%" UVxf "] restore_local\n", \
+ PTR2UV(PL_comppad), PTR2UV(PL_curpad)));
/*
@@ -481,7 +479,7 @@ Clone the state variables associated with running and compiling pads.
PL_comppad = av_dup(proto_perl->Icomppad, param); \
PL_curpad = PL_comppad ? AvARRAY(PL_comppad) : NULL; \
PL_comppad_name = \
- padnamelist_dup(proto_perl->Icomppad_name, param); \
+ padnamelist_dup(proto_perl->Icomppad_name, param); \
PL_comppad_name_fill = proto_perl->Icomppad_name_fill; \
PL_comppad_name_floor = proto_perl->Icomppad_name_floor; \
PL_min_intro_pending = proto_perl->Imin_intro_pending; \
diff --git a/Master/tlpkg/tlperl/lib/CORE/parser.h b/Master/tlpkg/tlperl/lib/CORE/parser.h
index abffd25c424..d5bc3c86165 100644
--- a/Master/tlpkg/tlperl/lib/CORE/parser.h
+++ b/Master/tlpkg/tlperl/lib/CORE/parser.h
@@ -56,7 +56,7 @@ typedef struct yy_parser {
char *lex_casestack; /* what kind of case mods in effect */
U8 lex_defer; /* state after determined token */
U8 lex_dojoin; /* doing an array interpolation
- 1 = @{...} 2 = ->@ */
+ 1 = @{...} 2 = ->@ */
U8 expect; /* how to interpret ambiguous tokens */
bool preambled;
bool sub_no_recover; /* can't recover from a sublex error */
@@ -81,8 +81,8 @@ typedef struct yy_parser {
LEXSHARED *lex_shared;
SV *linestr; /* current chunk of src text */
char *bufptr; /* carries the cursor (current parsing
- position) from one invocation of yylex
- to the next */
+ position) from one invocation of yylex
+ to the next */
char *oldbufptr; /* in yylex, beginning of current token */
char *oldoldbufptr; /* in yylex, beginning of previous token */
char *bufend;
@@ -137,8 +137,8 @@ typedef struct yy_parser {
# define LEX_START_COPIED 0x00000008
# define LEX_DONT_CLOSE_RSFP 0x00000010
# define LEX_START_FLAGS \
- (LEX_START_SAME_FILTER|LEX_START_COPIED \
- |LEX_IGNORE_UTF8_HINTS|LEX_EVALBYTES|LEX_DONT_CLOSE_RSFP)
+ (LEX_START_SAME_FILTER|LEX_START_COPIED \
+ |LEX_IGNORE_UTF8_HINTS|LEX_EVALBYTES|LEX_DONT_CLOSE_RSFP)
#endif
/* flags for parser API */
diff --git a/Master/tlpkg/tlperl/lib/CORE/patchlevel.h b/Master/tlpkg/tlperl/lib/CORE/patchlevel.h
index 3c504eef587..1a48368e7c6 100644
--- a/Master/tlpkg/tlperl/lib/CORE/patchlevel.h
+++ b/Master/tlpkg/tlperl/lib/CORE/patchlevel.h
@@ -8,14 +8,38 @@
*
*/
+/*
+=for apidoc AmDnU|U8|PERL_REVISION
+The major number component of the perl interpreter currently being compiled or
+executing. This has been C<5> from 1993 into 2020.
+
+Instead use one of the version comparison macros. See C<L</PERL_VERSION_EQ>>.
+
+=for apidoc AmDnU|U8|PERL_VERSION
+The minor number component of the perl interpreter currently being compiled or
+executing. Between 1993 into 2020, this has ranged from 0 to 33.
+
+Instead use one of the version comparison macros. See C<L</PERL_VERSION_EQ>>.
+
+=for apidoc AmDnU|U8|PERL_SUBVERSION
+The micro number component of the perl interpreter currently being compiled or
+executing. In stable releases this gives the dot release number for
+maintenance updates. In development releases this gives a tag for a snapshot
+of the status at various points in the development cycle.
+
+Instead use one of the version comparison macros. See C<L</PERL_VERSION_EQ>>.
+
+=cut
+*/
+
#ifndef __PATCHLEVEL_H_INCLUDED__
/* do not adjust the whitespace! Configure expects the numbers to be
* exactly on the third column */
#define PERL_REVISION 5 /* age */
-#define PERL_VERSION 32 /* epoch */
-#define PERL_SUBVERSION 1 /* generation */
+#define PERL_VERSION 34 /* epoch */
+#define PERL_SUBVERSION 0 /* generation */
/* The following numbers describe the earliest compatible version of
Perl ("compatibility" here being defined as sufficient binary/API
@@ -35,7 +59,7 @@
changing them should not be necessary.
*/
#define PERL_API_REVISION 5
-#define PERL_API_VERSION 32
+#define PERL_API_VERSION 34
#define PERL_API_SUBVERSION 0
/*
XXX Note: The selection of non-default Configure options, such
@@ -47,42 +71,42 @@
#endif
/*
- local_patches -- list of locally applied less-than-subversion patches.
- If you're distributing such a patch, please give it a name and a
- one-line description, placed just before the last NULL in the array
- below. If your patch fixes a bug in the perlbug database, please
- mention the bugid. If your patch *IS* dependent on a prior patch,
- please place your applied patch line after its dependencies. This
- will help tracking of patch dependencies.
-
- Please either use 'diff --unified=0' if your diff supports
- that or edit the hunk of the diff output which adds your patch
- to this list, to remove context lines which would give patch
- problems. For instance, if the original context diff is
-
- *** patchlevel.h.orig <date here>
- --- patchlevel.h <date here>
- *** 38,43 ***
- --- 38,44 ---
- ,"FOO1235 - some patch"
- ,"BAR3141 - another patch"
- ,"BAZ2718 - and another patch"
- + ,"MINE001 - my new patch"
- ,NULL
- };
-
- please change it to
- *** patchlevel.h.orig <date here>
- --- patchlevel.h <date here>
- *** 41,43 ***
- --- 41,44 ---
- + ,"MINE001 - my new patch"
- ,NULL
- };
-
- (Note changes to line numbers as well as removal of context lines.)
- This will prevent patch from choking if someone has previously
- applied different patches than you.
+ local_patches -- list of locally applied less-than-subversion patches.
+ If you're distributing such a patch, please give it a name and a
+ one-line description, placed just before the last NULL in the array
+ below. If your patch fixes a bug in the perlbug database, please
+ mention the bugid. If your patch *IS* dependent on a prior patch,
+ please place your applied patch line after its dependencies. This
+ will help tracking of patch dependencies.
+
+ Please either use 'diff --unified=0' if your diff supports
+ that or edit the hunk of the diff output which adds your patch
+ to this list, to remove context lines which would give patch
+ problems. For instance, if the original context diff is
+
+ *** patchlevel.h.orig <date here>
+ --- patchlevel.h <date here>
+ *** 38,43 ***
+ --- 38,44 ---
+ ,"FOO1235 - some patch"
+ ,"BAR3141 - another patch"
+ ,"BAZ2718 - and another patch"
+ + ,"MINE001 - my new patch"
+ ,NULL
+ };
+
+ please change it to
+ *** patchlevel.h.orig <date here>
+ --- patchlevel.h <date here>
+ *** 41,43 ***
+ --- 41,44 ---
+ + ,"MINE001 - my new patch"
+ ,NULL
+ };
+
+ (Note changes to line numbers as well as removal of context lines.)
+ This will prevent patch from choking if someone has previously
+ applied different patches than you.
History has shown that nobody distributes patches that also
modify patchlevel.h. Do it yourself. The following perl
@@ -96,8 +120,8 @@ my $seen=0;
while (<PLIN>) {
if (/\t,NULL/ and $seen) {
while (my $c = shift @ARGV){
- $c =~ s|\\|\\\\|g;
- $c =~ s|"|\\"|g;
+ $c =~ s|\\|\\\\|g;
+ $c =~ s|"|\\"|g;
print PLOUT qq{\t,"$c"\n};
}
}
@@ -132,19 +156,19 @@ hunk.
#include "git_version.h"
# endif
static const char * const local_patches[] = {
- NULL
+ NULL
#ifdef PERL_GIT_UNCOMMITTED_CHANGES
- ,"uncommitted-changes"
+ ,"uncommitted-changes"
#endif
- PERL_GIT_UNPUSHED_COMMITS /* do not remove this line */
- ,NULL
+ PERL_GIT_UNPUSHED_COMMITS /* do not remove this line */
+ ,NULL
};
/* Initial space prevents this variable from being inserted in config.sh */
# define LOCAL_PATCH_COUNT \
- ((int)(C_ARRAY_LENGTH(local_patches)-2))
+ ((int)(C_ARRAY_LENGTH(local_patches)-2))
/* the old terms of reference, add them only when explicitly included */
#define PATCHLEVEL PERL_VERSION
diff --git a/Master/tlpkg/tlperl/lib/CORE/perl.h b/Master/tlpkg/tlperl/lib/CORE/perl.h
index b0d35e27c72..17a21a1c420 100644
--- a/Master/tlpkg/tlperl/lib/CORE/perl.h
+++ b/Master/tlpkg/tlperl/lib/CORE/perl.h
@@ -31,11 +31,11 @@
/* this is used for functions which take a depth trailing
* argument under debugging */
#ifdef DEBUGGING
-#define _pDEPTH ,U32 depth
-#define _aDEPTH ,depth
+# define _pDEPTH ,U32 depth
+# define _aDEPTH ,depth
#else
-#define _pDEPTH
-#define _aDEPTH
+# define _pDEPTH
+# define _aDEPTH
#endif
/* NOTE 1: that with gcc -std=c89 the __STDC_VERSION__ is *not* defined
@@ -62,18 +62,6 @@
# endif
#endif
-#ifdef PERL_GLOBAL_STRUCT_PRIVATE
-# ifndef PERL_GLOBAL_STRUCT
-# define PERL_GLOBAL_STRUCT
-# endif
-#endif
-
-#ifdef PERL_GLOBAL_STRUCT
-# ifndef MULTIPLICITY
-# define MULTIPLICITY
-# endif
-#endif
-
#ifdef MULTIPLICITY
# ifndef PERL_IMPLICIT_CONTEXT
# define PERL_IMPLICIT_CONTEXT
@@ -86,27 +74,6 @@
# undef _WIN32
#endif
-#if defined(__SYMBIAN32__) || (defined(__VC32__) && defined(WINS))
-# ifndef SYMBIAN
-# define SYMBIAN
-# endif
-#endif
-
-#ifdef __SYMBIAN32__
-# include "symbian/symbian_proto.h"
-#endif
-
-/* Any stack-challenged places. The limit varies (and often
- * is configurable), but using more than a kilobyte of stack
- * is usually dubious in these systems. */
-#if defined(__SYMBIAN32__)
-/* Symbian: need to work around the SDK features. *
- * On WINS: MS VC5 generates calls to _chkstk, *
- * if a "large" stack frame is allocated. *
- * gcc on MARM does not generate calls like these. */
-# define USE_HEAP_INSTEAD_OF_STACK
-#endif
-
/* Use the reentrant APIs like localtime_r and getpwent_r */
/* Win32 has naturally threadsafe libraries, no need to use any _r variants.
* XXX KEEP makedef.pl copy of this code in sync */
@@ -116,13 +83,40 @@
/* <--- here ends the logic shared by perl.h and makedef.pl */
+/*
+=for apidoc_section $directives
+=for apidoc AmnUu|void|EXTERN_C
+When not compiling using C++, expands to nothing.
+Otherwise is used in a declaration of a function to indicate the function
+should have external C linkage. This is required for things to work for just
+about all functions with external linkage compiled into perl.
+Often, you can use C<L</START_EXTERN_C>> ... C<L</END_EXTERN_C>> blocks
+surrounding all your code that you need to have this linkage.
+
+Example usage:
+
+ EXTERN_C int flock(int fd, int op);
+
+=for apidoc Amnu||START_EXTERN_C
+When not compiling using C++, expands to nothing.
+Otherwise begins a section of code in which every function will effectively
+have C<L</EXTERN_C>> applied to it, that is to have external C linkage. The
+section is ended by a C<L</END_EXTERN_C>>.
+
+=for apidoc Amnu||END_EXTERN_C
+When not compiling using C++, expands to nothing.
+Otherwise ends a section of code already begun by a C<L</START_EXTERN_C>>.
+
+=cut
+*/
+
#undef START_EXTERN_C
#undef END_EXTERN_C
#undef EXTERN_C
#ifdef __cplusplus
-# define START_EXTERN_C extern "C" {
-# define END_EXTERN_C }
# define EXTERN_C extern "C"
+# define START_EXTERN_C EXTERN_C {
+# define END_EXTERN_C }
#else
# define START_EXTERN_C
# define END_EXTERN_C
@@ -141,25 +135,16 @@
# endif
#endif
-#if defined(PERL_GLOBAL_STRUCT) && !defined(PERL_GET_VARS)
-# ifdef PERL_GLOBAL_STRUCT_PRIVATE
- EXTERN_C struct perl_vars* Perl_GetVarsPrivate();
-# define PERL_GET_VARS() Perl_GetVarsPrivate() /* see miniperlmain.c */
-# else
-# define PERL_GET_VARS() PL_VarsPtr
-# endif
-#endif
-
-/* this used to be off by default, now its on, see perlio.h */
-#define PERLIO_FUNCS_CONST
+/*
+=for apidoc_section $concurrency
+=for apidoc AmU|void|dTHXa|PerlInterpreter * a
+On threaded perls, set C<pTHX> to C<a>; on unthreaded perls, do nothing
-#define pVAR struct perl_vars* my_vars PERL_UNUSED_DECL
+=for apidoc AmU|void|dTHXoa|PerlInterpreter * a
+Now a synonym for C<L</dTHXa>>.
-#ifdef PERL_GLOBAL_STRUCT
-# define dVAR pVAR = (struct perl_vars*)PERL_GET_VARS()
-#else
-# define dVAR dNOOP
-#endif
+=cut
+*/
#ifdef PERL_IMPLICIT_CONTEXT
# ifndef MULTIPLICITY
@@ -169,16 +154,8 @@
# define pTHX tTHX my_perl PERL_UNUSED_DECL
# define aTHX my_perl
# define aTHXa(a) aTHX = (tTHX)a
-# ifdef PERL_GLOBAL_STRUCT
-# define dTHXa(a) dVAR; pTHX = (tTHX)a
-# else
-# define dTHXa(a) pTHX = (tTHX)a
-# endif
-# ifdef PERL_GLOBAL_STRUCT
-# define dTHX dVAR; pTHX = PERL_GET_THX
-# else
-# define dTHX pTHX = PERL_GET_THX
-# endif
+# define dTHXa(a) pTHX = (tTHX)a
+# define dTHX pTHX = PERL_GET_THX
# define pTHX_ pTHX,
# define aTHX_ aTHX,
# define pTHX_1 2
@@ -211,16 +188,24 @@
* implementation of multiplicity using C++ objects. They have been left
* here solely for the sake of XS code which has incorrectly
* cargo-culted them.
+ *
+ * The only one Devel::PPPort handles is this; list it as deprecated
+
+=for apidoc_section $concurrency
+=for apidoc AmD|void|CPERLscope|void x
+Now a no-op.
+
+=cut
*/
-#define CPERLscope(x) x
-#define CPERLarg void
-#define CPERLarg_
-#define _CPERLarg
-#define PERL_OBJECT_THIS
-#define _PERL_OBJECT_THIS
-#define PERL_OBJECT_THIS_
-#define CALL_FPTR(fptr) (*fptr)
-#define MEMBER_TO_FPTR(name) name
+# define CPERLscope(x) x
+# define CPERLarg void
+# define CPERLarg_
+# define _CPERLarg
+# define PERL_OBJECT_THIS
+# define _PERL_OBJECT_THIS
+# define PERL_OBJECT_THIS_
+# define CALL_FPTR(fptr) (*fptr)
+# define MEMBER_TO_FPTR(name) name
#endif /* !PERL_CORE */
#define CALLRUNOPS PL_runops
@@ -286,10 +271,10 @@
RX_ENGINE(rx)->qr_package(aTHX_ (rx))
#if defined(USE_ITHREADS)
-#define CALLREGDUPE(prog,param) \
+# define CALLREGDUPE(prog,param) \
Perl_re_dup(aTHX_ (prog),(param))
-#define CALLREGDUPE_PVT(prog,param) \
+# define CALLREGDUPE_PVT(prog,param) \
(prog ? RX_ENGINE(prog)->dupe(aTHX_ (prog),(param)) \
: (REGEXP *)NULL)
#endif
@@ -314,42 +299,42 @@
*/
#ifndef PERL_MICRO
-#if defined __GNUC__ && !defined(__INTEL_COMPILER)
-# if __GNUC__ == 3 && __GNUC_MINOR__ >= 1 || __GNUC__ > 3 /* 3.1 -> */
-# define HASATTRIBUTE_DEPRECATED
-# endif
-# if __GNUC__ >= 3 /* 3.0 -> */ /* XXX Verify this version */
-# define HASATTRIBUTE_FORMAT
-# if defined __MINGW32__
-# define PRINTF_FORMAT_NULL_OK
+# if defined __GNUC__ && !defined(__INTEL_COMPILER)
+# if __GNUC__ == 3 && __GNUC_MINOR__ >= 1 || __GNUC__ > 3 /* 3.1 -> */
+# define HASATTRIBUTE_DEPRECATED
+# endif
+# if __GNUC__ >= 3 /* 3.0 -> */ /* XXX Verify this version */
+# define HASATTRIBUTE_FORMAT
+# if defined __MINGW32__
+# define PRINTF_FORMAT_NULL_OK
+# endif
+# endif
+# if __GNUC__ >= 3 /* 3.0 -> */
+# define HASATTRIBUTE_MALLOC
+# endif
+# if __GNUC__ == 3 && __GNUC_MINOR__ >= 3 || __GNUC__ > 3 /* 3.3 -> */
+# define HASATTRIBUTE_NONNULL
+# endif
+# if __GNUC__ == 2 && __GNUC_MINOR__ >= 5 || __GNUC__ > 2 /* 2.5 -> */
+# define HASATTRIBUTE_NORETURN
+# endif
+# if __GNUC__ >= 3 /* gcc 3.0 -> */
+# define HASATTRIBUTE_PURE
+# endif
+# if __GNUC__ == 3 && __GNUC_MINOR__ >= 4 || __GNUC__ > 3 /* 3.4 -> */
+# define HASATTRIBUTE_UNUSED
+# endif
+# if __GNUC__ == 3 && __GNUC_MINOR__ == 3 && !defined(__cplusplus)
+# define HASATTRIBUTE_UNUSED /* gcc-3.3, but not g++-3.3. */
+# endif
+# if __GNUC__ == 3 && __GNUC_MINOR__ >= 4 || __GNUC__ > 3 /* 3.4 -> */
+# define HASATTRIBUTE_WARN_UNUSED_RESULT
+# endif
+ /* always_inline is buggy in gcc <= 4.6 and causes compilation errors */
+# if __GNUC__ == 4 && __GNUC_MINOR__ >= 7 || __GNUC__ > 4 /* 4.7 -> */
+# define HASATTRIBUTE_ALWAYS_INLINE
# endif
# endif
-# if __GNUC__ >= 3 /* 3.0 -> */
-# define HASATTRIBUTE_MALLOC
-# endif
-# if __GNUC__ == 3 && __GNUC_MINOR__ >= 3 || __GNUC__ > 3 /* 3.3 -> */
-# define HASATTRIBUTE_NONNULL
-# endif
-# if __GNUC__ == 2 && __GNUC_MINOR__ >= 5 || __GNUC__ > 2 /* 2.5 -> */
-# define HASATTRIBUTE_NORETURN
-# endif
-# if __GNUC__ >= 3 /* gcc 3.0 -> */
-# define HASATTRIBUTE_PURE
-# endif
-# if __GNUC__ == 3 && __GNUC_MINOR__ >= 4 || __GNUC__ > 3 /* 3.4 -> */
-# define HASATTRIBUTE_UNUSED
-# endif
-# if __GNUC__ == 3 && __GNUC_MINOR__ == 3 && !defined(__cplusplus)
-# define HASATTRIBUTE_UNUSED /* gcc-3.3, but not g++-3.3. */
-# endif
-# if __GNUC__ == 3 && __GNUC_MINOR__ >= 4 || __GNUC__ > 3 /* 3.4 -> */
-# define HASATTRIBUTE_WARN_UNUSED_RESULT
-# endif
-/* always_inline is buggy in gcc <= 4.6 and causes compilation errors */
-# if __GNUC__ == 4 && __GNUC_MINOR__ >= 7 || __GNUC__ > 4 /* 4.7 -> */
-# define HASATTRIBUTE_ALWAYS_INLINE
-# endif
-#endif
#endif /* #ifndef PERL_MICRO */
#ifdef HASATTRIBUTE_DEPRECATED
@@ -428,7 +413,25 @@
* marking unused variables (they need e.g. a #pragma) and therefore
* cpp macros like PERL_UNUSED_DECL cannot work for this purpose, even
* if it were PERL_UNUSED_DECL(x), which it cannot be (see above).
- *
+
+=for apidoc_section $directives
+=for apidoc AmnU||PERL_UNUSED_DECL
+Tells the compiler that the parameter in the function prototype just before it
+is not necessarily expected to be used in the function. Not that many
+compilers understand this, so this should only be used in cases where
+C<L</PERL_UNUSED_ARG>> can't conveniently be used.
+
+Example usage:
+
+=over
+
+ Signal_t
+ Perl_perly_sighandler(int sig, Siginfo_t *sip PERL_UNUSED_DECL,
+ void *uap PERL_UNUSED_DECL, bool safe)
+
+=back
+
+=cut
*/
#ifndef PERL_UNUSED_DECL
@@ -439,6 +442,24 @@
* for silencing unused variables that are actually used most of the time,
* but we cannot quite get rid of, such as "ax" in PPCODE+noargs xsubs,
* or variables/arguments that are used only in certain configurations.
+
+=for apidoc Ams||PERL_UNUSED_ARG|void x
+This is used to suppress compiler warnings that a parameter to a function is
+not used. This situation can arise, for example, when a parameter is needed
+under some configuration conditions, but not others, so that C preprocessor
+conditional compilation causes it be used just some times.
+
+=for apidoc Amns||PERL_UNUSED_CONTEXT
+This is used to suppress compiler warnings that the thread context parameter to
+a function is not used. This situation can arise, for example, when a
+C preprocessor conditional compilation causes it be used just some times.
+
+=for apidoc Ams||PERL_UNUSED_VAR|void x
+This is used to suppress compiler warnings that the variable I<x> is not used.
+This situation can arise, for example, when a C preprocessor conditional
+compilation causes it be used just some times.
+
+=cut
*/
#ifndef PERL_UNUSED_ARG
# define PERL_UNUSED_ARG(x) ((void)sizeof(x))
@@ -447,7 +468,7 @@
# define PERL_UNUSED_VAR(x) ((void)sizeof(x))
#endif
-#if defined(USE_ITHREADS) || defined(PERL_GLOBAL_STRUCT)
+#if defined(USE_ITHREADS)
# define PERL_UNUSED_CONTEXT PERL_UNUSED_ARG(my_perl)
#else
# define PERL_UNUSED_CONTEXT
@@ -466,31 +487,40 @@
# endif
#endif
-/* Use PERL_UNUSED_RESULT() to suppress the warnings about unused results
- * of function calls, e.g. PERL_UNUSED_RESULT(foo(a, b)).
- *
- * The main reason for this is that the combination of gcc -Wunused-result
- * (part of -Wall) and the __attribute__((warn_unused_result)) cannot
- * be silenced with casting to void. This causes trouble when the system
- * header files use the attribute.
- *
- * Use PERL_UNUSED_RESULT sparingly, though, since usually the warning
- * is there for a good reason: you might lose success/failure information,
- * or leak resources, or changes in resources.
- *
- * But sometimes you just want to ignore the return value, e.g. on
- * codepaths soon ending up in abort, or in "best effort" attempts,
- * or in situations where there is no good way to handle failures.
- *
- * Sometimes PERL_UNUSED_RESULT might not be the most natural way:
- * another possibility is that you can capture the return value
- * and use PERL_UNUSED_VAR on that.
- *
- * The __typeof__() is used instead of typeof() since typeof() is not
- * available under strict C89, and because of compilers masquerading
- * as gcc (clang and icc), we want exactly the gcc extension
- * __typeof__ and nothing else.
- */
+/*
+
+=for apidoc Am||PERL_UNUSED_RESULT|void x
+
+This macro indicates to discard the return value of the function call inside
+it, I<e.g.>,
+
+ PERL_UNUSED_RESULT(foo(a, b))
+
+The main reason for this is that the combination of C<gcc -Wunused-result>
+(part of C<-Wall>) and the C<__attribute__((warn_unused_result))> cannot
+be silenced with casting to C<void>. This causes trouble when the system
+header files use the attribute.
+
+Use C<PERL_UNUSED_RESULT> sparingly, though, since usually the warning
+is there for a good reason: you might lose success/failure information,
+or leak resources, or changes in resources.
+
+But sometimes you just want to ignore the return value, I<e.g.>, on
+codepaths soon ending up in abort, or in "best effort" attempts,
+or in situations where there is no good way to handle failures.
+
+Sometimes C<PERL_UNUSED_RESULT> might not be the most natural way:
+another possibility is that you can capture the return value
+and use C<L</PERL_UNUSED_VAR>> on that.
+
+=cut
+
+The __typeof__() is used instead of typeof() since typeof() is not
+available under strict C89, and because of compilers masquerading
+as gcc (clang and icc), we want exactly the gcc extension
+__typeof__ and nothing else.
+
+*/
#ifndef PERL_UNUSED_RESULT
# if defined(__GNUC__) && defined(HASATTRIBUTE_WARN_UNUSED_RESULT)
# define PERL_UNUSED_RESULT(v) STMT_START { __typeof__(v) z = (v); (void)sizeof(z); } STMT_END
@@ -499,9 +529,9 @@
# endif
#endif
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) && _MSC_VER < 1400
/* XXX older MSVC versions have a smallish macro buffer */
-#define PERL_SMALL_MACRO_BUFFER
+# define PERL_SMALL_MACRO_BUFFER
#endif
/* on gcc (and clang), specify that a warning should be temporarily
@@ -570,6 +600,18 @@
#define MSVC_DIAG_IGNORE_STMT(x) MSVC_DIAG_IGNORE(x) NOOP
#define MSVC_DIAG_RESTORE_STMT MSVC_DIAG_RESTORE NOOP
+/*
+=for apidoc Amns||NOOP
+Do nothing; typically used as a placeholder to replace something that used to
+do something.
+
+=for apidoc Amns||dNOOP
+Declare nothing; typically used as a placeholder to replace something that used
+to declare something. Works on compilers that require declarations before any
+code.
+
+=cut
+*/
#define NOOP /*EMPTY*/(void)0
#define dNOOP struct Perl___notused_struct
@@ -596,18 +638,34 @@
# define pTHX_12 12
#endif
-#ifndef dVAR
+/*
+=for apidoc_section $concurrency
+=for apidoc AmnU||dVAR
+This is now a synonym for dNOOP: declare nothing
+
+=for apidoc_section $XS
+=for apidoc Amns||dMY_CXT_SV
+Now a placeholder that declares nothing
+
+=cut
+*/
+
+#ifndef PERL_CORE
+ /* Backwards compatibility macro for XS code. It used to be part of the
+ * PERL_GLOBAL_STRUCT(_PRIVATE) feature, which no longer exists */
# define dVAR dNOOP
-#endif
-/* these are only defined for compatibility; should not be used internally */
-#if !defined(pTHXo) && !defined(PERL_CORE)
-# define pTHXo pTHX
-# define pTHXo_ pTHX_
-# define aTHXo aTHX
-# define aTHXo_ aTHX_
-# define dTHXo dTHX
-# define dTHXoa(x) dTHXa(x)
+ /* these are only defined for compatibility; should not be used internally.
+ * */
+# define dMY_CXT_SV dNOOP
+# ifndef pTHXo
+# define pTHXo pTHX
+# define pTHXo_ pTHX_
+# define aTHXo aTHX
+# define aTHXo_ aTHX_
+# define dTHXo dTHX
+# define dTHXoa(x) dTHXa(x)
+# endif
#endif
#ifndef pTHXx
@@ -622,17 +680,9 @@
* PerlIO_foo() expands to PL_StdIO->pFOO(PL_StdIO, ...).
* dTHXs is therefore needed for all functions using PerlIO_foo(). */
#ifdef PERL_IMPLICIT_SYS
-# ifdef PERL_GLOBAL_STRUCT_PRIVATE
-# define dTHXs dVAR; dTHX
-# else
# define dTHXs dTHX
-# endif
#else
-# ifdef PERL_GLOBAL_STRUCT_PRIVATE
-# define dTHXs dVAR
-# else
# define dTHXs dNOOP
-# endif
#endif
#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus)
@@ -642,20 +692,41 @@
#endif
/*
-=head1 Miscellaneous Functions
-
+=for apidoc_section $directives
=for apidoc AmnUu|void|STMT_START
+=for apidoc_item ||STMT_END
+
+This allows a series of statements in a macro to be used as a single statement,
+as in
- STMT_START { statements; } STMT_END;
+ if (x) STMT_START { ... } STMT_END else ...
-can be used as a single statement, as in
+Note that you can't return a value out of them, which limits their utility.
+But see C<L</PERL_USE_GCC_BRACE_GROUPS>>.
- if (x) STMT_START { ... } STMT_END; else ...
+=for apidoc AmnuU|bool|PERL_USE_GCC_BRACE_GROUPS
-These are often used in macro definitions. Note that you can't return a value
-out of them.
+This C pre-processor value, if defined, indicates that it is permissible to use
+the GCC brace groups extension. This extension, of the form
-=for apidoc AmnUhu|void|STMT_END
+ ({ statement ... })
+
+turns the block consisting of I<statements ...> into an expression with a
+value, unlike plain C language blocks. This can present optimization
+possibilities, B<BUT> you generally need to specify an alternative in case this
+ability doesn't exist or has otherwise been forbidden.
+
+Example usage:
+
+=over
+
+ #ifdef PERL_USE_GCC_BRACE_GROUPS
+ ...
+ #else
+ ...
+ #endif
+
+=back
=cut
@@ -821,16 +892,6 @@ out of them.
#include <sys/types.h>
-/* EVC 4 SDK headers includes a bad definition of MB_CUR_MAX in stdlib.h
- which is included from stdarg.h. Bad definition not present in SD 2008
- SDK headers. wince.h is not yet included, so we cant fix this from there
- since by then MB_CUR_MAX will be defined from stdlib.h.
- cewchar.h includes a correct definition of MB_CUR_MAX and it is copied here
- since cewchar.h can't be included this early */
-#if defined(UNDER_CE) && (_MSC_VER < 1300)
-# define MB_CUR_MAX 1uL
-#endif
-
# ifdef I_WCHAR
# include <wchar.h>
# endif
@@ -922,6 +983,12 @@ out of them.
# if !defined(NO_LOCALE_TELEPHONE) && defined(LC_TELEPHONE)
# define USE_LOCALE_TELEPHONE
# endif
+# if !defined(NO_LOCALE_SYNTAX) && defined(LC_SYNTAX)
+# define USE_LOCALE_SYNTAX
+# endif
+# if !defined(NO_LOCALE_TOD) && defined(LC_TOD)
+# define USE_LOCALE_TOD
+# endif
/* XXX The next few defines are unfortunately duplicated in makedef.pl, and
* changes here MUST also be made there */
@@ -1003,10 +1070,6 @@ extern char **myenviron;
# include <sys/wait.h>
#endif
-#ifdef __SYMBIAN32__
-# undef _SC_ARG_MAX /* Symbian has _SC_ARG_MAX but no sysconf() */
-#endif
-
#if defined(HAS_SYSCALL) && !defined(HAS_SYSCALL_PROTO)
EXTERN_C int syscall(int, ...);
#endif
@@ -1015,9 +1078,33 @@ EXTERN_C int syscall(int, ...);
EXTERN_C int usleep(unsigned int);
#endif
-/* macros for correct constant construction. These are in C99 <stdint.h>
+/* Macros for correct constant construction. These are in C99 <stdint.h>
* (so they will not be available in strict C89 mode), but they are nice, so
- * let's define them if necessary. */
+ * let's define them if necessary.
+=for apidoc_section $integer
+=for apidoc Am|I16|INT16_C|number
+=for apidoc_item |I32|INT32_C|number
+=for apidoc_item |I64|INT64_C|number
+
+Returns a token the C compiler recognizes for the constant C<number> of the
+corresponding integer type on the machine.
+
+If the machine does not have a 64-bit type, C<INT64_C> is undefined.
+Use C<L</INTMAX_C>> to get the largest type available on the platform.
+
+=for apidoc Am|U16|UINT16_C|number
+=for apidoc_item |U32|UINT32_C|number
+=for apidoc_item |U64|UINT64_C|number
+
+Returns a token the C compiler recognizes for the constant C<number> of the
+corresponding unsigned integer type on the machine.
+
+If the machine does not have a 64-bit type, C<UINT64_C> is undefined.
+Use C<L</UINTMAX_C>> to get the largest type available on the platform.
+
+
+=cut
+*/
#ifndef UINT16_C
# if INTSIZE >= 2
# define UINT16_C(x) ((U16_TYPE)x##U)
@@ -1083,6 +1170,33 @@ EXTERN_C int usleep(unsigned int);
# define UINT64_C(c) PeRl_UINT64_C(c)
# endif
+/*
+=for apidoc_section $integer
+=for apidoc Am||INTMAX_C|number
+Returns a token the C compiler recognizes for the constant C<number> of the
+widest integer type on the machine. For example, if the machine has C<long
+long>s, C<INTMAX_C(-1)> would yield
+
+ -1LL
+
+See also, for example, C<L</INT32_C>>.
+
+Use L</IV> to declare variables of the maximum usable size on this platform.
+
+=for apidoc Am||UINTMAX_C|number
+Returns a token the C compiler recognizes for the constant C<number> of the
+widest unsigned integer type on the machine. For example, if the machine has
+C<long>s, C<UINTMAX_C(1)> would yield
+
+ 1UL
+
+See also, for example, C<L</UINT32_C>>.
+
+Use L</UV> to declare variables of the maximum usable size on this platform.
+
+=cut
+*/
+
# ifndef I_STDINT
typedef I64TYPE PERL_INTMAX_T;
typedef U64TYPE PERL_UINTMAX_T;
@@ -1180,7 +1294,7 @@ EXTERN_C int usleep(unsigned int);
#define PERL_USES_PL_PIDSTATUS
#endif
-#if !defined(OS2) && !defined(WIN32) && !defined(DJGPP) && !defined(__SYMBIAN32__)
+#if !defined(OS2) && !defined(WIN32) && !defined(DJGPP)
#define PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION
#endif
@@ -1225,9 +1339,7 @@ EXTERN_C int usleep(unsigned int);
# define Ptrdiff_t SSize_t
#endif
-#ifndef __SYMBIAN32__
# include <string.h>
-#endif
/* This comes after <stdlib.h> so we don't try to change the standard
* library prototypes; we'll use our own in proto.h instead. */
@@ -1280,6 +1392,12 @@ EXTERN_C int usleep(unsigned int);
#define MALLOC_TOO_LATE_FOR(ch) TOO_LATE_FOR_(ch, " with $ENV{PERL_MALLOC_OPT}")
#define MALLOC_CHECK_TAINT2(argc,argv) MALLOC_CHECK_TAINT(argc,argv,NULL)
+/*
+=for apidoc Am|void|memzero|void * d|Size_t l
+Set the C<l> bytes starting at C<*d> to all zeroes.
+
+=cut
+*/
#ifndef memzero
# define memzero(d,l) memset(d,0,l)
#endif
@@ -1396,7 +1514,7 @@ EXTERN_C char *crypt(const char *, const char *);
#endif
/*
-=head1 Errno
+=for apidoc_section $errno
=for apidoc m|void|SETERRNO|int errcode|int vmserrcode
@@ -1499,7 +1617,7 @@ was saved by C<dSAVE_ERRNO> or C<RESTORE_ERRNO>.
#endif
/*
-=head1 Warning and Dieing
+=for apidoc_section $warning
=for apidoc Amn|SV *|ERRSV
@@ -1576,6 +1694,20 @@ any magic.
# define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv))
#endif
+/*
+=for apidoc_section $SV
+=for apidoc Amn|SV *|DEFSV
+Returns the SV associated with C<$_>
+
+=for apidoc Am|void|DEFSV_set|SV * sv
+Associate C<sv> with C<$_>
+
+=for apidoc Amn|void|SAVE_DEFSV
+Localize C<$_>. See L<perlguts/Localizing changes>.
+
+=cut
+*/
+
#ifndef errno
extern int errno; /* ANSI allows errno to be an lvalue expr.
* For example in multithreaded environments
@@ -1785,8 +1917,7 @@ any magic.
* longer need that. XS modules can (and do) use this name, so it must remain
* a part of the API that's visible to modules.
-=head1 Miscellaneous Functions
-
+=for apidoc_section $string
=for apidoc ATmD|int|my_sprintf|NN char *buffer|NN const char *pat|...
Do NOT use this due to the possibility of overflowing C<buffer>. Instead use
@@ -1976,6 +2107,8 @@ typedef UVTYPE UV;
* For int conversions we do not need two casts if pointers are
* the same size as IV and UV. Otherwise we need an explicit
* cast (PTRV) to avoid compiler warnings.
+ *
+ * These are mentioned in perlguts
*/
#if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE)
# define PTRV UV
@@ -1995,6 +2128,14 @@ typedef UVTYPE UV;
# define PTR2ul(p) INT2PTR(unsigned long,p)
#endif
+/*
+=for apidoc_section Casting
+=for apidoc Cyh|type|NUM2PTR|type|int value
+You probably want to be using L<C</INT2PTR>> instead.
+
+=cut
+*/
+
#define NUM2PTR(any,d) (any)(PTRV)(d)
#define PTR2IV(p) INT2PTR(IV,p)
#define PTR2UV(p) INT2PTR(UV,p)
@@ -2037,7 +2178,22 @@ typedef UVTYPE UV;
# endif
#endif
-typedef NVTYPE NV;
+/* On MS Windows,with 64-bit mingw-w64 compilers, we
+ need to attend to a __float128 alignment issue if
+ USE_QUADMATH is defined. Otherwise we simply:
+ typedef NVTYPE NV
+ 32-bit mingw.org compilers might also require
+ aligned(32) - at least that's what I found with my
+ Math::Foat128 module. But this is as yet untested
+ here, so no allowance is being made for mingw.org
+ compilers at this stage. -- sisyphus January 2021
+*/
+#if defined(USE_QUADMATH) && defined(__MINGW64__)
+ /* 64-bit build, mingw-w64 compiler only */
+ typedef NVTYPE NV __attribute__ ((aligned(8)));
+#else
+ typedef NVTYPE NV;
+#endif
#ifdef I_IEEEFP
# include <ieeefp.h>
@@ -2327,7 +2483,7 @@ extern long double Perl_my_frexpl(long double x, int *e);
# define FP_QNAN FP_QNAN
# endif
# include <math.h>
-# ifdef I_IEEFP
+# ifdef I_IEEEFP
# include <ieeefp.h>
# endif
# ifdef I_FP
@@ -2442,8 +2598,8 @@ extern long double Perl_my_frexpl(long double x, int *e);
# define Perl_fp_class_snan(x) (_fpclass(x) & _FPCLASS_SNAN)
# define Perl_fp_class_qnan(x) (_fpclass(x) & _FPCLASS_QNAN)
# define Perl_fp_class_nan(x) (_fpclass(x) & (_FPCLASS_SNAN|_FPCLASS_QNAN))
-# define Perl_fp_class_ninf(x) (_fpclass(x) & _FPCLASS_NINF))
-# define Perl_fp_class_pinf(x) (_fpclass(x) & _FPCLASS_PINF))
+# define Perl_fp_class_ninf(x) (_fpclass(x) & _FPCLASS_NINF)
+# define Perl_fp_class_pinf(x) (_fpclass(x) & _FPCLASS_PINF)
# define Perl_fp_class_inf(x) (_fpclass(x) & (_FPCLASS_NINF|_FPCLASS_PINF))
# define Perl_fp_class_nnorm(x) (_fpclass(x) & _FPCLASS_NN)
# define Perl_fp_class_pnorm(x) (_fpclass(x) & _FPCLASS_PN)
@@ -2536,7 +2692,7 @@ extern long double Perl_my_frexpl(long double x, int *e);
# define Perl_isfinitel(x) isfinitel(x)
# elif defined(HAS_FINITEL)
# define Perl_isfinitel(x) finitel(x)
-# elif defined(HAS_INFL) && defined(HAS_NANL)
+# elif defined(HAS_ISINFL) && defined(HAS_ISNANL)
# define Perl_isfinitel(x) !(isinfl(x)||isnanl(x))
# else
# define Perl_isfinitel(x) ((x) * 0 == 0) /* See Perl_isfinite. */
@@ -2571,6 +2727,41 @@ extern long double Perl_my_frexpl(long double x, int *e);
#define my_atof2(a,b) my_atof3(a,b,0)
/*
+=for apidoc_section $numeric
+=for apidoc AmT|NV|Perl_acos|NV x
+=for apidoc_item |NV|Perl_asin|NV x
+=for apidoc_item |NV|Perl_atan|NV x
+=for apidoc_item |NV|Perl_atan2|NV x|NV y
+=for apidoc_item |NV|Perl_ceil|NV x
+=for apidoc_item |NV|Perl_cos|NV x
+=for apidoc_item |NV|Perl_cosh|NV x
+=for apidoc_item |NV|Perl_exp|NV x
+=for apidoc_item |NV|Perl_floor|NV x
+=for apidoc_item |NV|Perl_fmod|NV x|NV y
+=for apidoc_item |NV|Perl_frexp|NV x|int *exp
+=for apidoc_item |IV|Perl_isfinite|NV x
+=for apidoc_item |IV|Perl_isinf|NV x
+=for apidoc_item |IV|Perl_isnan|NV x
+=for apidoc_item |NV|Perl_ldexp|NV x|int exp
+=for apidoc_item |NV|Perl_log|NV x
+=for apidoc_item |NV|Perl_log10|NV x
+=for apidoc_item |NV|Perl_modf|NV x|NV *iptr
+=for apidoc_item |NV|Perl_pow|NV x|NV y
+=for apidoc_item |NV|Perl_sin|NV x
+=for apidoc_item |NV|Perl_sinh|NV x
+=for apidoc_item |NV|Perl_sqrt|NV x
+=for apidoc_item |NV|Perl_tan|NV x
+=for apidoc_item |NV|Perl_tanh|NV x
+
+These perform the corresponding mathematical operation on the operand(s), using
+the libc function designed for the task that has just enough precision for an
+NV on this platform. If no such function with sufficient precision exists,
+the highest precision one available is used.
+
+=cut
+*/
+
+/*
* CHAR_MIN and CHAR_MAX are not included here, as the (char) type may be
* ambiguous. It may be equivalent to (signed char) or (unsigned char)
* depending on local options. Until Configure detects this (or at least
@@ -2608,43 +2799,28 @@ extern long double Perl_my_frexpl(long double x, int *e);
#endif
/*
-=head1 Numeric functions
-
-=for apidoc AmnUh||PERL_INT_MIN
-=for apidoc AmnUh||PERL_LONG_MAX
-=for apidoc AmnUh||PERL_LONG_MIN
-=for apidoc AmnUh||PERL_QUAD_MAX
-=for apidoc AmnUh||PERL_SHORT_MAX
-=for apidoc AmnUh||PERL_SHORT_MIN
-=for apidoc AmnUh||PERL_UCHAR_MAX
-=for apidoc AmnUh||PERL_UCHAR_MIN
-=for apidoc AmnUh||PERL_UINT_MAX
-=for apidoc AmnUh||PERL_ULONG_MAX
-=for apidoc AmnUh||PERL_ULONG_MIN
-=for apidoc AmnUh||PERL_UQUAD_MAX
-=for apidoc AmnUh||PERL_UQUAD_MIN
-=for apidoc AmnUh||PERL_USHORT_MAX
-=for apidoc AmnUh||PERL_USHORT_MIN
-=for apidoc AmnUh||PERL_QUAD_MIN
+=for apidoc_section $integer
+
=for apidoc AmnU||PERL_INT_MAX
-This and
-C<PERL_INT_MIN>,
-C<PERL_LONG_MAX>,
-C<PERL_LONG_MIN>,
-C<PERL_QUAD_MAX>,
-C<PERL_SHORT_MAX>,
-C<PERL_SHORT_MIN>,
-C<PERL_UCHAR_MAX>,
-C<PERL_UCHAR_MIN>,
-C<PERL_UINT_MAX>,
-C<PERL_ULONG_MAX>,
-C<PERL_ULONG_MIN>,
-C<PERL_UQUAD_MAX>,
-C<PERL_UQUAD_MIN>,
-C<PERL_USHORT_MAX>,
-C<PERL_USHORT_MIN>,
-C<PERL_QUAD_MIN>
-give the largest and smallest number representable in the current
+=for apidoc_item ||PERL_INT_MIN
+=for apidoc_item ||PERL_LONG_MAX
+=for apidoc_item ||PERL_LONG_MIN
+=for apidoc_item ||PERL_SHORT_MAX
+=for apidoc_item ||PERL_SHORT_MIN
+=for apidoc_item ||PERL_UCHAR_MAX
+=for apidoc_item ||PERL_UCHAR_MIN
+=for apidoc_item ||PERL_UINT_MAX
+=for apidoc_item ||PERL_UINT_MIN
+=for apidoc_item ||PERL_ULONG_MAX
+=for apidoc_item ||PERL_ULONG_MIN
+=for apidoc_item ||PERL_USHORT_MAX
+=for apidoc_item ||PERL_USHORT_MIN
+=for apidoc_item ||PERL_QUAD_MAX
+=for apidoc_item ||PERL_QUAD_MIN
+=for apidoc_item ||PERL_UQUAD_MAX
+=for apidoc_item ||PERL_UQUAD_MIN
+
+These give the largest and smallest number representable in the current
platform in variables of the corresponding types.
For signed types, the smallest representable number is the most negative
@@ -2701,6 +2877,7 @@ typedef struct gv GV;
typedef struct io IO;
typedef struct context PERL_CONTEXT;
typedef struct block BLOCK;
+typedef struct invlist INVLIST;
typedef struct magic MAGIC;
typedef struct xpv XPV;
@@ -2873,8 +3050,6 @@ typedef struct padname PADNAME;
# else
# include "vos/vosish.h"
# endif
-#elif defined(__SYMBIAN32__)
-# include "symbian/symbianish.h"
#elif defined(__HAIKU__)
# include "haiku/haikuish.h"
#else
@@ -2916,37 +3091,6 @@ typedef struct padname PADNAME;
# define USE_ENVIRON_ARRAY
#endif
-#ifdef USE_ITHREADS
- /* On some platforms it would be safe to use a read/write mutex with many
- * readers possible at the same time. On other platforms, notably IBM ones,
- * subsequent getenv calls destroy earlier ones. Those platforms would not
- * be able to handle simultaneous getenv calls */
-# define ENV_LOCK MUTEX_LOCK(&PL_env_mutex)
-# define ENV_UNLOCK MUTEX_UNLOCK(&PL_env_mutex)
-# define ENV_INIT MUTEX_INIT(&PL_env_mutex);
-# define ENV_TERM MUTEX_DESTROY(&PL_env_mutex);
-#else
-# define ENV_LOCK NOOP;
-# define ENV_UNLOCK NOOP;
-# define ENV_INIT NOOP;
-# define ENV_TERM NOOP;
-#endif
-
-/* Some critical sections need to lock both the locale and the environment.
- * XXX khw intends to change this to lock both mutexes, but that brings up
- * issues of potential deadlock, so should be done at the beginning of a
- * development cycle. So for now, it just locks the environment. Note that
- * many modern platforms are locale-thread-safe anyway, so locking the locale
- * mutex is a no-op anyway */
-#define ENV_LOCALE_LOCK ENV_LOCK
-#define ENV_LOCALE_UNLOCK ENV_UNLOCK
-
-/* And some critical sections care only that no one else is writing either the
- * locale nor the environment. XXX Again this is for the future. This can be
- * simulated with using COND_WAIT in thread.h */
-#define ENV_LOCALE_READ_LOCK ENV_LOCALE_LOCK
-#define ENV_LOCALE_READ_UNLOCK ENV_LOCALE_UNLOCK
-
#if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
/* having sigaction(2) means that the OS supports both 1-arg and 3-arg
* signal handlers. But the perl core itself only fully supports 1-arg
@@ -3045,7 +3189,7 @@ typedef struct padname PADNAME;
#endif
/*
-=head1 Miscellaneous Functions
+=for apidoc_section $embedding
=for apidoc Am|void|PERL_SYS_INIT|int *argc|char*** argv
Provides system-specific tune up of the C runtime environment necessary to
@@ -3094,12 +3238,6 @@ freeing any remaining Perl interpreters.
# endif
#endif
-/* USE_5005THREADS needs to be after unixish.h as <pthread.h> includes
- * <sys/signal.h> which defines NSIG - which will stop inclusion of <signal.h>
- * this results in many functions being undeclared which bothers C++
- * May make sense to have threads after "*ish.h" anyway
- */
-
/* clang Thread Safety Analysis/Annotations/Attributes
* http://clang.llvm.org/docs/ThreadSafetyAnalysis.html
*
@@ -3110,8 +3248,6 @@ freeing any remaining Perl interpreters.
*/
#if defined(USE_ITHREADS) && defined(I_PTHREAD) && \
defined(__clang__) && \
- !defined(PERL_GLOBAL_STRUCT) && \
- !defined(PERL_GLOBAL_STRUCT_PRIVATE) && \
!defined(SWIG) && \
((!defined(__apple_build_version__) && \
((__clang_major__ == 3 && __clang_minor__ >= 6) || \
@@ -3219,6 +3355,15 @@ typedef pthread_mutex_t PERL_TSA_CAPABILITY("mutex") perl_mutex;
typedef pthread_cond_t perl_cond;
typedef pthread_key_t perl_key;
# endif
+
+/* Many readers; single writer */
+typedef struct {
+ perl_mutex lock;
+ perl_cond wakeup;
+ SSize_t readers_count;
+} perl_RnW1_mutex_t;
+
+
#endif /* USE_ITHREADS */
#ifdef PERL_TSA_ACTIVE
@@ -3610,11 +3755,8 @@ EXTERN_C int perl_tsa_mutex_unlock(perl_mutex* mutex)
#define HEKfARG(p) ((void*)(p))
-/*
-=for apidoc Amnh||UTF8f
-=for apidoc Amh||UTF8fARG|bool is_utf8|Size_t byte_len|char *str
-
-=cut
+/* Documented in perlguts
+ *
* %4p is a custom format
*/
#ifndef UTF8f
@@ -3626,7 +3768,13 @@ EXTERN_C int perl_tsa_mutex_unlock(perl_mutex* mutex)
#define PNfARG(pn) (int)1, (UV)PadnameLEN(pn), (void *)PadnamePV(pn)
#ifdef PERL_CORE
-/* not used; but needed for backward compatibility with XS code? - RMB */
+/* not used; but needed for backward compatibility with XS code? - RMB
+=for apidoc AmnD|const char *|UVf
+
+Obsolete form of C<UVuf>, which you should convert to instead use
+
+=cut
+*/
# undef UVf
#elif !defined(UVf)
# define UVf UVuf
@@ -3653,14 +3801,14 @@ EXTERN_C int perl_tsa_mutex_unlock(perl_mutex* mutex)
#endif
/*
-=head1 Miscellaneous Functions
+=for apidoc_section $directives
-=for apidoc AmU|bool|LIKELY|const bool expr
+=for apidoc Am||LIKELY|bool expr
Returns the input unchanged, but at the same time it gives a branch prediction
hint to the compiler that this condition is likely to be true.
-=for apidoc AmU|bool|UNLIKELY|const bool expr
+=for apidoc Am||UNLIKELY|bool expr
Returns the input unchanged, but at the same time it gives a branch prediction
hint to the compiler that this condition is likely to be false.
@@ -3716,40 +3864,55 @@ hint to the compiler that this condition is likely to be false.
# define __has_builtin(x) 0 /* not a clang style compiler */
#endif
-/* ASSUME is like assert(), but it has a benefit in a release build. It is a
- hint to a compiler about a statement of fact in a function call free
- expression, which allows the compiler to generate better machine code.
- In a debug build, ASSUME(x) is a synonym for assert(x). ASSUME(0) means
- the control path is unreachable. In a for loop, ASSUME can be used to hint
- that a loop will run at least X times. ASSUME is based off MSVC's __assume
- intrinsic function, see its documents for more details.
+/*
+=for apidoc Am||ASSUME|bool expr
+C<ASSUME> is like C<assert()>, but it has a benefit in a release build. It is a
+hint to a compiler about a statement of fact in a function call free
+expression, which allows the compiler to generate better machine code. In a
+debug build, C<ASSUME(x)> is a synonym for C<assert(x)>. C<ASSUME(0)> means the
+control path is unreachable. In a for loop, C<ASSUME> can be used to hint that
+a loop will run at least X times. C<ASSUME> is based off MSVC's C<__assume>
+intrinsic function, see its documents for more details.
+
+=cut
*/
-#ifndef DEBUGGING
-# if __has_builtin(__builtin_unreachable) \
- || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5 || __GNUC__ > 4) /* 4.5 -> */
+#ifdef DEBUGGING
+# define ASSUME(x) assert(x)
+# if __has_builtin(__builtin_unreachable)
+# define HAS_BUILTIN_UNREACHABLE
+# elif (defined(__GNUC__) && ( __GNUC__ > 4 \
+ || __GNUC__ == 4 && __GNUC_MINOR__ >= 5))
+# define HAS_BUILTIN_UNREACHABLE
+# endif
+#endif
+
+#if defined(__sun) || (defined(__hpux) && !defined(__GNUC__))
+# ifndef ASSUME
+# define ASSUME(x) /* ASSUME() generates warnings on Solaris */
+# endif
+# define NOT_REACHED
+#elif defined(HAS_BUILTIN_UNREACHABLE)
+# ifndef ASSUME
# define ASSUME(x) ((x) ? (void) 0 : __builtin_unreachable())
-# elif defined(_MSC_VER)
+# endif
+# define NOT_REACHED \
+ STMT_START { \
+ ASSUME(!"UNREACHABLE"); __builtin_unreachable(); \
+ } STMT_END
+#else
+# if defined(_MSC_VER)
# define ASSUME(x) __assume(x)
# elif defined(__ARMCC_VERSION) /* untested */
# define ASSUME(x) __promise(x)
# else
-/* a random compiler might define assert to its own special optimization token
- so pass it through to C lib as a last resort */
+ /* a random compiler might define assert to its own special optimization
+ * token so pass it through to C lib as a last resort */
# define ASSUME(x) assert(x)
# endif
-#else
-# define ASSUME(x) assert(x)
-#endif
-
-#if defined(__sun) /* ASSUME() generates warnings on Solaris */
-# define NOT_REACHED
-#elif defined(DEBUGGING) && (__has_builtin(__builtin_unreachable) \
- || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5 || __GNUC__ > 4)) /* 4.5 -> */
-# define NOT_REACHED STMT_START { ASSUME(!"UNREACHABLE"); __builtin_unreachable(); } STMT_END
-#else
# define NOT_REACHED ASSUME(!"UNREACHABLE")
#endif
+#undef HAS_BUILTIN_UNREACHABLE
/* Some unistd.h's give a prototype for pause() even though
HAS_PAUSE ends up undefined. This causes the #define
@@ -3825,7 +3988,7 @@ typedef I32 (*filter_t) (pTHX_ int, SV *, int);
&& idx >= AvFILLp(PL_parser->rsfp_filters))
#define PERL_FILTER_EXISTS(i) \
(PL_parser && PL_parser->rsfp_filters \
- && (i) <= av_tindex(PL_parser->rsfp_filters))
+ && (Size_t) (i) < av_count(PL_parser->rsfp_filters))
#if defined(_AIX) && !defined(_AIX43)
#if defined(USE_REENTRANT) || defined(_REENTRANT) || defined(_THREAD_SAFE)
@@ -3845,7 +4008,7 @@ typedef struct crypt_data { /* straight from /usr/include/crypt.h */
#ifndef PERL_CALLCONV
# ifdef __cplusplus
-# define PERL_CALLCONV extern "C"
+# define PERL_CALLCONV EXTERN_C
# else
# define PERL_CALLCONV
# endif
@@ -3860,8 +4023,9 @@ typedef struct crypt_data { /* straight from /usr/include/crypt.h */
#ifndef PERL_STATIC_NO_RET
# define PERL_STATIC_NO_RET STATIC
#endif
-/* PERL_STATIC_NO_RET is supposed to be equivalent to PERL_STATIC_INLINE on
- builds that dont have a noreturn as a declaration specifier
+
+/* PERL_STATIC_INLINE_NO_RET is supposed to be equivalent to PERL_STATIC_INLINE
+ * on builds that dont have a noreturn as a declaration specifier
*/
#ifndef PERL_STATIC_INLINE_NO_RET
# define PERL_STATIC_INLINE_NO_RET PERL_STATIC_INLINE
@@ -3939,7 +4103,8 @@ typedef struct crypt_data { /* straight from /usr/include/crypt.h */
typedef struct magic_state MGS; /* struct magic_state defined in mg.c */
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) \
+ || defined(PERL_EXT_RE_BUILD)
/* These have to be predeclared, as they are used in proto.h which is #included
* before their definitions in regcomp.h. */
@@ -4086,6 +4251,21 @@ my_swap16(const U16 x) {
/* This may look like unnecessary jumping through hoops, but converting
out of range floating point values to integers *is* undefined behaviour,
and it is starting to bite.
+
+=for apidoc_section $casting
+=for apidoc Am|I32|I_32|NV what
+Cast an NV to I32 while avoiding undefined C behavior
+
+=for apidoc Am|U32|U_32|NV what
+Cast an NV to U32 while avoiding undefined C behavior
+
+=for apidoc Am|IV|I_V|NV what
+Cast an NV to IV while avoiding undefined C behavior
+
+=for apidoc Am|UV|U_V|NV what
+Cast an NV to UV while avoiding undefined C behavior
+
+=cut
*/
#ifndef CAST_INLINE
#define I_32(what) (cast_i32((NV)(what)))
@@ -4111,6 +4291,25 @@ my_swap16(const U16 x) {
#define U_I(what) ((unsigned int)U_32(what))
#define U_L(what) U_32(what)
+/*
+=for apidoc_section $integer
+=for apidoc Amn|IV|IV_MAX
+The largest signed integer that fits in an IV on this platform.
+
+=for apidoc Amn|IV|IV_MIN
+The negative signed integer furthest away from 0 that fits in an IV on this
+platform.
+
+=for apidoc Amn|UV|UV_MAX
+The largest unsigned integer that fits in a UV on this platform.
+
+=for apidoc Amn|UV|UV_MIN
+The smallest unsigned integer that fits in a UV on this platform. It should
+equal zero.
+
+=cut
+*/
+
#ifdef HAS_SIGNBIT
# ifndef Perl_signbit
# define Perl_signbit signbit
@@ -4131,7 +4330,7 @@ my_swap16(const U16 x) {
#endif
#ifndef __cplusplus
-#if !(defined(WIN32) || defined(SYMBIAN))
+#if !defined(WIN32)
Uid_t getuid (void);
Uid_t geteuid (void);
Gid_t getgid (void);
@@ -4188,6 +4387,11 @@ Gid_t getegid (void);
#define DEBUG_DB_RECURSE_FLAG 0x40000000
#define DEBUG_TOP_FLAG 0x80000000 /* -D was given --> PL_debug |= FLAG */
+/* Both flags have to be set */
+# define DEBUG_BOTH_FLAGS_TEST_(flag1, flag2) \
+ UNLIKELY((PL_debug & ((flag1)|(flag2))) \
+ == ((flag1)|(flag2)))
+
# define DEBUG_p_TEST_ UNLIKELY(PL_debug & DEBUG_p_FLAG)
# define DEBUG_s_TEST_ UNLIKELY(PL_debug & DEBUG_s_FLAG)
# define DEBUG_l_TEST_ UNLIKELY(PL_debug & DEBUG_l_FLAG)
@@ -4216,11 +4420,11 @@ Gid_t getegid (void);
# define DEBUG_L_TEST_ UNLIKELY(PL_debug & DEBUG_L_FLAG)
# define DEBUG_i_TEST_ UNLIKELY(PL_debug & DEBUG_i_FLAG)
# define DEBUG_y_TEST_ UNLIKELY(PL_debug & DEBUG_y_FLAG)
-# define DEBUG_Xv_TEST_ (DEBUG_X_TEST_ && DEBUG_v_TEST_)
-# define DEBUG_Uv_TEST_ (DEBUG_U_TEST_ && DEBUG_v_TEST_)
-# define DEBUG_Pv_TEST_ (DEBUG_P_TEST_ && DEBUG_v_TEST_)
-# define DEBUG_Lv_TEST_ (DEBUG_L_TEST_ && DEBUG_v_TEST_)
-# define DEBUG_yv_TEST_ (DEBUG_y_TEST_ && DEBUG_v_TEST_)
+# define DEBUG_Xv_TEST_ DEBUG_BOTH_FLAGS_TEST_(DEBUG_X_FLAG, DEBUG_v_FLAG)
+# define DEBUG_Uv_TEST_ DEBUG_BOTH_FLAGS_TEST_(DEBUG_U_FLAG, DEBUG_v_FLAG)
+# define DEBUG_Pv_TEST_ DEBUG_BOTH_FLAGS_TEST_(DEBUG_P_FLAG, DEBUG_v_FLAG)
+# define DEBUG_Lv_TEST_ DEBUG_BOTH_FLAGS_TEST_(DEBUG_L_FLAG, DEBUG_v_FLAG)
+# define DEBUG_yv_TEST_ DEBUG_BOTH_FLAGS_TEST_(DEBUG_y_FLAG, DEBUG_v_FLAG)
#ifdef DEBUGGING
@@ -4283,16 +4487,47 @@ Gid_t getegid (void);
} \
} STMT_END
+/* These allow you to customize your debugging output for specialized,
+ * generally temporary ad-hoc purposes. For example, if you need 'errno'
+ * preserved, you can add definitions to these macros (either in this file for
+ * the whole program, or before the #include "perl.h" in a particular .c file
+ * you're trying to debug) and recompile:
+ *
+ * #define DEBUG_PRE_STMTS dSAVE_ERRNO;
+ * #define DEBUG_POST_STMTS RESTORE_ERRNO;
+ *
+ * Other potential things include displaying timestamps, location information,
+ * which thread, etc. Heres an example with both errno and location info:
+ *
+ * #define DEBUG_PRE_STMTS dSAVE_ERRNO; \
+ * PerlIO_printf(Perl_debug_log, "%s:%d: ", __FILE__, __LINE__);
+ * #define DEBUG_POST RESTORE_ERRNO;
+ *
+ * All DEBUG statements in the compiled scope will be have these extra
+ * statements compiled in; they will be executed only for the DEBUG statements
+ * whose flags are turned on.
+ */
+#ifndef DEBUG_PRE_STMTS
+# define DEBUG_PRE_STMTS
+#endif
+#ifndef DEBUG_POST_STMTS
+# define DEBUG_POST_STMTS
+#endif
+
# define DEBUG__(t, a) \
STMT_START { \
- if (t) STMT_START {a;} STMT_END; \
+ if (t) STMT_START { \
+ DEBUG_PRE_STMTS a; DEBUG_POST_STMTS \
+ } STMT_END; \
} STMT_END
# define DEBUG_f(a) DEBUG__(DEBUG_f_TEST, a)
/* For re_comp.c, re_exec.c, assume -Dr has been specified */
# ifdef PERL_EXT_RE_BUILD
-# define DEBUG_r(a) STMT_START {a;} STMT_END
+# define DEBUG_r(a) STMT_START { \
+ DEBUG_PRE_STMTS a; DEBUG_POST_STMTS \
+ } STMT_END;
# else
# define DEBUG_r(a) DEBUG__(DEBUG_r_TEST, a)
# endif /* PERL_EXT_RE_BUILD */
@@ -4725,6 +4960,22 @@ EXTCONST char PL_No[]
INIT("");
EXTCONST char PL_Zero[]
INIT("0");
+
+/*
+=for apidoc_section $numeric
+=for apidoc AmTuU|const char *|PL_hexdigit|U8 value
+
+This array, indexed by an integer, converts that value into the character that
+represents it. For example, if the input is 8, the return will be a string
+whose first character is '8'. What is actually returned is a pointer into a
+string. All you are interested in is the first character of that string. To
+get uppercase letters (for the values 10..15), add 16 to the index. Hence,
+C<PL_hexdigit[11]> is C<'b'>, and C<PL_hexdigit[11+16]> is C<'B'>. Adding 16
+to an index whose representation is '0'..'9' yields the same as not adding 16.
+Indices outside the range 0..31 result in (bad) undedefined behavior.
+
+=cut
+*/
EXTCONST char PL_hexdigit[]
INIT("0123456789abcdef0123456789ABCDEF");
@@ -4794,10 +5045,10 @@ EXTCONST int PL_sig_num[];
* folds such as outside the range or to multiple characters. */
#ifdef DOINIT
-#ifndef EBCDIC
+# ifndef EBCDIC
/* The EBCDIC fold table depends on the code page, and hence is found in
- * utfebcdic.h */
+ * ebcdic_tables.h */
EXTCONST unsigned char PL_fold[] = {
0, 1, 2, 3, 4, 5, 6, 7,
@@ -4833,6 +5084,42 @@ EXTCONST unsigned char PL_fold[] = {
240, 241, 242, 243, 244, 245, 246, 247,
248, 249, 250, 251, 252, 253, 254, 255
};
+
+EXT unsigned char PL_fold_locale[] = { /* Unfortunately not EXTCONST. */
+ 0, 1, 2, 3, 4, 5, 6, 7,
+ 8, 9, 10, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, 58, 59, 60, 61, 62, 63,
+ 64, 'a', 'b', 'c', 'd', 'e', 'f', 'g',
+ 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
+ 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
+ 'x', 'y', 'z', 91, 92, 93, 94, 95,
+ 96, 'A', 'B', 'C', 'D', 'E', 'F', 'G',
+ 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
+ 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
+ 'X', 'Y', 'Z', 123, 124, 125, 126, 127,
+ 128, 129, 130, 131, 132, 133, 134, 135,
+ 136, 137, 138, 139, 140, 141, 142, 143,
+ 144, 145, 146, 147, 148, 149, 150, 151,
+ 152, 153, 154, 155, 156, 157, 158, 159,
+ 160, 161, 162, 163, 164, 165, 166, 167,
+ 168, 169, 170, 171, 172, 173, 174, 175,
+ 176, 177, 178, 179, 180, 181, 182, 183,
+ 184, 185, 186, 187, 188, 189, 190, 191,
+ 192, 193, 194, 195, 196, 197, 198, 199,
+ 200, 201, 202, 203, 204, 205, 206, 207,
+ 208, 209, 210, 211, 212, 213, 214, 215,
+ 216, 217, 218, 219, 220, 221, 222, 223,
+ 224, 225, 226, 227, 228, 229, 230, 231,
+ 232, 233, 234, 235, 236, 237, 238, 239,
+ 240, 241, 242, 243, 244, 245, 246, 247,
+ 248, 249, 250, 251, 252, 253, 254, 255
+};
+
EXTCONST unsigned char PL_fold_latin1[] = {
/* Full latin1 complement folding, except for three problematic code points:
* Micro sign (181 = 0xB5) and y with diearesis (255 = 0xFF) have their
@@ -4945,145 +5232,29 @@ EXTCONST unsigned char PL_mod_latin1_uc[] = {
200, 201, 202, 203, 204, 205, 206, 207,
208, 209, 210, 211, 212, 213, 214, 215,
216, 217, 218, 219, 220, 221, 222,
-#if UNICODE_MAJOR_VERSION > 2 \
- || (UNICODE_MAJOR_VERSION == 2 && UNICODE_DOT_VERSION >= 1 \
- && UNICODE_DOT_DOT_VERSION >= 8)
+# if UNICODE_MAJOR_VERSION > 2 \
+ || (UNICODE_MAJOR_VERSION == 2 && UNICODE_DOT_VERSION >= 1 \
+ && UNICODE_DOT_DOT_VERSION >= 8)
255 /*sharp s*/,
-#else /* uc(sharp s) is 'sharp s' itself in early unicode */
+# else /* uc(sharp s) is 'sharp s' itself in early unicode */
223,
-#endif
+# endif
224-32, 225-32, 226-32, 227-32, 228-32, 229-32, 230-32, 231-32,
232-32, 233-32, 234-32, 235-32, 236-32, 237-32, 238-32, 239-32,
240-32, 241-32, 242-32, 243-32, 244-32, 245-32, 246-32, 247,
248-32, 249-32, 250-32, 251-32, 252-32, 253-32, 254-32, 255
};
-#endif /* !EBCDIC, but still in DOINIT */
+# endif /* !EBCDIC, but still in DOINIT */
#else /* ! DOINIT */
-# ifndef EBCDIC
+# ifndef EBCDIC
EXTCONST unsigned char PL_fold[];
EXTCONST unsigned char PL_fold_latin1[];
EXTCONST unsigned char PL_mod_latin1_uc[];
EXTCONST unsigned char PL_latin1_lc[];
+EXT unsigned char PL_fold_locale[]; /* Unfortunately not EXTCONST. */
# endif
#endif
-#ifndef PERL_GLOBAL_STRUCT /* or perlvars.h */
-#ifdef DOINIT
-EXT unsigned char PL_fold_locale[256] = { /* Unfortunately not EXTCONST. */
- 0, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23,
- 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55,
- 56, 57, 58, 59, 60, 61, 62, 63,
- 64, 'a', 'b', 'c', 'd', 'e', 'f', 'g',
- 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
- 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
- 'x', 'y', 'z', 91, 92, 93, 94, 95,
- 96, 'A', 'B', 'C', 'D', 'E', 'F', 'G',
- 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
- 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
- 'X', 'Y', 'Z', 123, 124, 125, 126, 127,
- 128, 129, 130, 131, 132, 133, 134, 135,
- 136, 137, 138, 139, 140, 141, 142, 143,
- 144, 145, 146, 147, 148, 149, 150, 151,
- 152, 153, 154, 155, 156, 157, 158, 159,
- 160, 161, 162, 163, 164, 165, 166, 167,
- 168, 169, 170, 171, 172, 173, 174, 175,
- 176, 177, 178, 179, 180, 181, 182, 183,
- 184, 185, 186, 187, 188, 189, 190, 191,
- 192, 193, 194, 195, 196, 197, 198, 199,
- 200, 201, 202, 203, 204, 205, 206, 207,
- 208, 209, 210, 211, 212, 213, 214, 215,
- 216, 217, 218, 219, 220, 221, 222, 223,
- 224, 225, 226, 227, 228, 229, 230, 231,
- 232, 233, 234, 235, 236, 237, 238, 239,
- 240, 241, 242, 243, 244, 245, 246, 247,
- 248, 249, 250, 251, 252, 253, 254, 255
-};
-#else
-EXT unsigned char PL_fold_locale[256]; /* Unfortunately not EXTCONST. */
-#endif
-#endif /* !PERL_GLOBAL_STRUCT */
-
-#ifdef DOINIT
-#ifdef EBCDIC
-EXTCONST unsigned char PL_freq[] = {/* EBCDIC frequencies for mixed English/C */
- 1, 2, 84, 151, 154, 155, 156, 157,
- 165, 246, 250, 3, 158, 7, 18, 29,
- 40, 51, 62, 73, 85, 96, 107, 118,
- 129, 140, 147, 148, 149, 150, 152, 153,
- 255, 6, 8, 9, 10, 11, 12, 13,
- 14, 15, 24, 25, 26, 27, 28, 226,
- 29, 30, 31, 32, 33, 43, 44, 45,
- 46, 47, 48, 49, 50, 76, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86,
- 87, 94, 95, 234, 181, 233, 187, 190,
- 180, 96, 97, 98, 99, 100, 101, 102,
- 104, 112, 182, 174, 236, 232, 229, 103,
- 228, 226, 114, 115, 116, 117, 118, 119,
- 120, 121, 122, 235, 176, 230, 194, 162,
- 130, 131, 132, 133, 134, 135, 136, 137,
- 138, 139, 201, 205, 163, 217, 220, 224,
- 5, 248, 227, 244, 242, 255, 241, 231,
- 240, 253, 16, 197, 19, 20, 21, 187,
- 23, 169, 210, 245, 237, 249, 247, 239,
- 168, 252, 34, 196, 36, 37, 38, 39,
- 41, 42, 251, 254, 238, 223, 221, 213,
- 225, 177, 52, 53, 54, 55, 56, 57,
- 58, 59, 60, 61, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 74, 75,
- 205, 208, 186, 202, 200, 218, 198, 179,
- 178, 214, 88, 89, 90, 91, 92, 93,
- 217, 166, 170, 207, 199, 209, 206, 204,
- 160, 212, 105, 106, 108, 109, 110, 111,
- 203, 113, 216, 215, 192, 175, 193, 243,
- 172, 161, 123, 124, 125, 126, 127, 128,
- 222, 219, 211, 195, 188, 193, 185, 184,
- 191, 183, 141, 142, 143, 144, 145, 146
-};
-#else /* ascii rather than ebcdic */
-EXTCONST unsigned char PL_freq[] = { /* letter frequencies for mixed English/C */
- 1, 2, 84, 151, 154, 155, 156, 157,
- 165, 246, 250, 3, 158, 7, 18, 29,
- 40, 51, 62, 73, 85, 96, 107, 118,
- 129, 140, 147, 148, 149, 150, 152, 153,
- 255, 182, 224, 205, 174, 176, 180, 217,
- 233, 232, 236, 187, 235, 228, 234, 226,
- 222, 219, 211, 195, 188, 193, 185, 184,
- 191, 183, 201, 229, 181, 220, 194, 162,
- 163, 208, 186, 202, 200, 218, 198, 179,
- 178, 214, 166, 170, 207, 199, 209, 206,
- 204, 160, 212, 216, 215, 192, 175, 173,
- 243, 172, 161, 190, 203, 189, 164, 230,
- 167, 248, 227, 244, 242, 255, 241, 231,
- 240, 253, 169, 210, 245, 237, 249, 247,
- 239, 168, 252, 251, 254, 238, 223, 221,
- 213, 225, 177, 197, 171, 196, 159, 4,
- 5, 6, 8, 9, 10, 11, 12, 13,
- 14, 15, 16, 17, 19, 20, 21, 22,
- 23, 24, 25, 26, 27, 28, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39,
- 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 52, 53, 54, 55, 56, 57,
- 58, 59, 60, 61, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 74, 75,
- 76, 77, 78, 79, 80, 81, 82, 83,
- 86, 87, 88, 89, 90, 91, 92, 93,
- 94, 95, 97, 98, 99, 100, 101, 102,
- 103, 104, 105, 106, 108, 109, 110, 111,
- 112, 113, 114, 115, 116, 117, 119, 120,
- 121, 122, 123, 124, 125, 126, 127, 128,
- 130, 131, 132, 133, 134, 135, 136, 137,
- 138, 139, 141, 142, 143, 144, 145, 146
-};
-#endif
-#else
-EXTCONST unsigned char PL_freq[];
-#endif
-
/* Although only used for debugging, these constants must be available in
* non-debugging builds too, since they're used in ext/re/re_exec.c,
* which has DEBUGGING enabled always */
@@ -5120,9 +5291,6 @@ EXTCONST char PL_bincompat_options[] =
# ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
" DEBUG_LEAKING_SCALARS_FORK_DUMP"
# endif
-# ifdef FCRYPT
- " FCRYPT"
-# endif
# ifdef HAS_TIMES
" HAS_TIMES"
# endif
@@ -5144,12 +5312,6 @@ EXTCONST char PL_bincompat_options[] =
# ifdef PERL_DEBUG_READONLY_OPS
" PERL_DEBUG_READONLY_OPS"
# endif
-# ifdef PERL_GLOBAL_STRUCT
- " PERL_GLOBAL_STRUCT"
-# endif
-# ifdef PERL_GLOBAL_STRUCT_PRIVATE
- " PERL_GLOBAL_STRUCT_PRIVATE"
-# endif
# ifdef PERL_IMPLICIT_CONTEXT
" PERL_IMPLICIT_CONTEXT"
# endif
@@ -5159,12 +5321,6 @@ EXTCONST char PL_bincompat_options[] =
# ifdef PERL_MICRO
" PERL_MICRO"
# endif
-# ifdef PERL_NEED_APPCTX
- " PERL_NEED_APPCTX"
-# endif
-# ifdef PERL_NEED_TIMESBASE
- " PERL_NEED_TIMESBASE"
-# endif
# ifdef PERL_POISON
" PERL_POISON"
# endif
@@ -5358,7 +5514,7 @@ typedef enum {
#define HINT_RE_FLAGS 0x02000000 /* re '/xism' pragma */
-#define HINT_FEATURE_MASK 0x1c000000 /* 3 bits for feature bundles */
+#define HINT_FEATURE_MASK 0x3c000000 /* 4 bits for feature bundles */
/* Note: Used for HINT_M_VMSISH_*,
currently defined by vms/vmsish.h:
@@ -5370,6 +5526,16 @@ typedef enum {
#define HINT_SORT_STABLE 0x00000100 /* sort styles */
#define HINT_SORT_UNSTABLE 0x00000200
+#define HINT_ALL_STRICT HINT_STRICT_REFS \
+ | HINT_STRICT_SUBS \
+ | HINT_STRICT_VARS
+
+#ifdef USE_STRICT_BY_DEFAULT
+#define HINTS_DEFAULT HINT_ALL_STRICT
+#else
+#define HINTS_DEFAULT 0
+#endif
+
/* flags for PL_sawampersand */
#define SAWAMPERSAND_LEFT 1 /* saw $` */
@@ -5505,34 +5671,6 @@ EXTCONST U16 PL_interp_size_5_18_0
INIT(PERL_INTERPRETER_SIZE_UPTO_MEMBER(PERL_LAST_5_18_0_INTERP_MEMBER));
-# ifdef PERL_GLOBAL_STRUCT
-/* MULTIPLICITY is automatically defined when PERL_GLOBAL_STRUCT is defined,
- hence it's safe and sane to nest this within #ifdef MULTIPLICITY */
-
-struct perl_vars {
-# include "perlvars.h"
-};
-
-EXTCONST U16 PL_global_struct_size
- INIT(sizeof(struct perl_vars));
-
-# ifdef PERL_CORE
-# ifndef PERL_GLOBAL_STRUCT_PRIVATE
-EXT struct perl_vars PL_Vars;
-EXT struct perl_vars *PL_VarsPtr INIT(&PL_Vars);
-# undef PERL_GET_VARS
-# define PERL_GET_VARS() PL_VarsPtr
-# endif /* !PERL_GLOBAL_STRUCT_PRIVATE */
-# else /* PERL_CORE */
-# if !defined(__GNUC__) || !defined(WIN32)
-EXT
-# endif /* WIN32 */
-struct perl_vars *PL_VarsPtr;
-# define PL_Vars (*((PL_VarsPtr) \
- ? PL_VarsPtr : (PL_VarsPtr = Perl_GetVars(aTHX))))
-# endif /* PERL_CORE */
-# endif /* PERL_GLOBAL_STRUCT */
-
/* Done with PERLVAR macros for now ... */
# undef PERLVAR
# undef PERLVARA
@@ -5605,13 +5743,11 @@ END_EXTERN_C
define HAVE_INTERP_INTERN */
#include "embed.h"
-#ifndef PERL_GLOBAL_STRUCT
START_EXTERN_C
# include "perlvars.h"
END_EXTERN_C
-#endif
#undef PERLVAR
#undef PERLVARA
@@ -5653,8 +5789,14 @@ EXTCONST runops_proc_t PL_runops_dbg
#define PERL_MAGIC_READONLY_ACCEPTABLE 0x40
#define PERL_MAGIC_VALUE_MAGIC 0x80
#define PERL_MAGIC_VTABLE_MASK 0x3F
+
+/* can this type of magic be attached to a readonly SV? */
#define PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(t) \
(PL_magic_data[(U8)(t)] & PERL_MAGIC_READONLY_ACCEPTABLE)
+
+/* Is this type of magic container magic (%ENV, $1 etc),
+ * or value magic (pos, taint etc)?
+ */
#define PERL_MAGIC_TYPE_IS_VALUE_MAGIC(t) \
(PL_magic_data[(U8)(t)] & PERL_MAGIC_VALUE_MAGIC)
@@ -5863,18 +6005,19 @@ EXTCONST U8 PL_extended_utf8_dfa_tab[] = {
* byte ones (as they are always legal) are to this state.
*/
-# define NUM_CLASSES 18
-# define N0 0
-# define N1 ((N0) + NUM_CLASSES)
-# define N2 ((N1) + NUM_CLASSES)
-# define N3 ((N2) + NUM_CLASSES)
-# define N4 ((N3) + NUM_CLASSES)
-# define N5 ((N4) + NUM_CLASSES)
-# define N6 ((N5) + NUM_CLASSES)
-# define N7 ((N6) + NUM_CLASSES)
-# define N8 ((N7) + NUM_CLASSES)
-# define N9 ((N8) + NUM_CLASSES)
-# define N10 ((N9) + NUM_CLASSES)
+# if defined(PERL_CORE)
+# define NUM_CLASSES 18
+# define N0 0
+# define N1 ((N0) + NUM_CLASSES)
+# define N2 ((N1) + NUM_CLASSES)
+# define N3 ((N2) + NUM_CLASSES)
+# define N4 ((N3) + NUM_CLASSES)
+# define N5 ((N4) + NUM_CLASSES)
+# define N6 ((N5) + NUM_CLASSES)
+# define N7 ((N6) + NUM_CLASSES)
+# define N8 ((N7) + NUM_CLASSES)
+# define N9 ((N8) + NUM_CLASSES)
+# define N10 ((N9) + NUM_CLASSES)
/*Class: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 */
/*N0*/ 0, 1,N1,N2,N3,N4,N5, 1, 1, 1, 1, 1, 1,N6,N7,N8,N9,N10,
@@ -6002,30 +6145,30 @@ EXTCONST U8 PL_strict_utf8_dfa_tab[] = {
* byte ones (as they are always legal) are to this state.
*/
-# undef N0
-# undef N1
-# undef N2
-# undef N3
-# undef N4
-# undef N5
-# undef N6
-# undef N7
-# undef N8
-# undef N9
-# undef NUM_CLASSES
-# define NUM_CLASSES 19
-# define N0 0
-# define N1 ((N0) + NUM_CLASSES)
-# define N2 ((N1) + NUM_CLASSES)
-# define N3 ((N2) + NUM_CLASSES)
-# define N4 ((N3) + NUM_CLASSES)
-# define N5 ((N4) + NUM_CLASSES)
-# define N6 ((N5) + NUM_CLASSES)
-# define N7 ((N6) + NUM_CLASSES)
-# define N8 ((N7) + NUM_CLASSES)
-# define N9 ((N8) + NUM_CLASSES)
-# define N10 ((N9) + NUM_CLASSES)
-# define N11 ((N10) + NUM_CLASSES)
+# undef N0
+# undef N1
+# undef N2
+# undef N3
+# undef N4
+# undef N5
+# undef N6
+# undef N7
+# undef N8
+# undef N9
+# undef NUM_CLASSES
+# define NUM_CLASSES 19
+# define N0 0
+# define N1 ((N0) + NUM_CLASSES)
+# define N2 ((N1) + NUM_CLASSES)
+# define N3 ((N2) + NUM_CLASSES)
+# define N4 ((N3) + NUM_CLASSES)
+# define N5 ((N4) + NUM_CLASSES)
+# define N6 ((N5) + NUM_CLASSES)
+# define N7 ((N6) + NUM_CLASSES)
+# define N8 ((N7) + NUM_CLASSES)
+# define N9 ((N8) + NUM_CLASSES)
+# define N10 ((N9) + NUM_CLASSES)
+# define N11 ((N10) + NUM_CLASSES)
/*Class: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 */
/*N0*/ 0, 1, N1, N2, N4, N7, N6, N3, N5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -6105,24 +6248,24 @@ EXTCONST U8 PL_c9_utf8_dfa_tab[] = {
* byte ones (as they are always legal) are to this state.
*/
-# undef N0
-# undef N1
-# undef N2
-# undef N3
-# undef N4
-# undef N5
-# undef N6
-# undef N7
-# undef NUM_CLASSES
-# define NUM_CLASSES 12
-# define N0 0
-# define N1 ((N0) + NUM_CLASSES)
-# define N2 ((N1) + NUM_CLASSES)
-# define N3 ((N2) + NUM_CLASSES)
-# define N4 ((N3) + NUM_CLASSES)
-# define N5 ((N4) + NUM_CLASSES)
-# define N6 ((N5) + NUM_CLASSES)
-# define N7 ((N6) + NUM_CLASSES)
+# undef N0
+# undef N1
+# undef N2
+# undef N3
+# undef N4
+# undef N5
+# undef N6
+# undef N7
+# undef NUM_CLASSES
+# define NUM_CLASSES 12
+# define N0 0
+# define N1 ((N0) + NUM_CLASSES)
+# define N2 ((N1) + NUM_CLASSES)
+# define N3 ((N2) + NUM_CLASSES)
+# define N4 ((N3) + NUM_CLASSES)
+# define N5 ((N4) + NUM_CLASSES)
+# define N6 ((N5) + NUM_CLASSES)
+# define N7 ((N6) + NUM_CLASSES)
/*Class: 0 1 2 3 4 5 6 7 8 9 10 11 */
/*N0*/ 0, 1, N1, N2, N5, N7, N3, N4, N6, 1, 1, 1,
@@ -6136,6 +6279,7 @@ EXTCONST U8 PL_c9_utf8_dfa_tab[] = {
/*N7*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, N2, 1, 1,
};
+# endif /* defined(PERL_CORE) */
# else /* End of is DOINIT */
EXTCONST U8 PL_extended_utf8_dfa_tab[];
@@ -6145,22 +6289,6 @@ EXTCONST U8 PL_c9_utf8_dfa_tab[];
# endif
#endif /* end of isn't EBCDIC */
-#ifndef PERL_NO_INLINE_FUNCTIONS
-/* Static inline funcs that depend on includes and declarations above.
- Some of these reference functions in the perl object files, and some
- compilers aren't smart enough to eliminate unused static inline
- functions, so including this file in source code can cause link errors
- even if the source code uses none of the functions. Hence including these
- can be suppressed by setting PERL_NO_INLINE_FUNCTIONS. Doing this will
- (obviously) result in unworkable XS code, but allows simple probing code
- to continue to work, because it permits tests to include the perl headers
- for definitions without creating a link dependency on the perl library
- (which may not exist yet).
-*/
-
-# include "inline.h"
-#endif
-
#include "overload.h"
END_EXTERN_C
@@ -6296,7 +6424,7 @@ typedef struct am_table_short AMTS;
cBOOL(PL_hints & (HINT_LOCALE|HINT_LOCALE_PARTIAL))
/*
-=head1 Locale-related functions and macros
+=for apidoc_section $locale
=for apidoc Amn|bool|IN_LOCALE
@@ -6406,89 +6534,135 @@ the plain locale pragma without a parameter (S<C<use locale>>) is in effect.
#endif
-/* Locale/thread synchronization macros. These aren't needed if using
- * thread-safe locale operations, except if something is broken */
-#if defined(USE_LOCALE) \
- && defined(USE_ITHREADS) \
- && (! defined(USE_THREAD_SAFE_LOCALE) || defined(TS_W32_BROKEN_LOCALECONV))
+/* Locale/thread synchronization macros. */
+#if ! ( defined(USE_LOCALE) \
+ && defined(USE_ITHREADS) \
+ && ( ! defined(USE_THREAD_SAFE_LOCALE) \
+ || ( defined(HAS_LOCALECONV) \
+ && ( ! defined(HAS_LOCALECONV_L) \
+ || defined(TS_W32_BROKEN_LOCALECONV))) \
+ || ( defined(HAS_NL_LANGINFO) \
+ && ! defined(HAS_THREAD_SAFE_NL_LANGINFO_L)) \
+ || (defined(HAS_MBLEN) && ! defined(HAS_MBRLEN)) \
+ || (defined(HAS_MBTOWC) && ! defined(HAS_MBRTOWC)) \
+ || (defined(HAS_WCTOMB) && ! defined(HAS_WCRTOMB))))
-/* We have a locale object holding the 'C' locale for Posix 2008 */
-# ifndef USE_POSIX_2008_LOCALE
-# define _LOCALE_TERM_POSIX_2008 NOOP
-# else
-# define _LOCALE_TERM_POSIX_2008 \
- STMT_START { \
- if (PL_C_locale_obj) { \
- /* Make sure we aren't using the locale \
- * space we are about to free */ \
- uselocale(LC_GLOBAL_LOCALE); \
- freelocale(PL_C_locale_obj); \
- PL_C_locale_obj = (locale_t) NULL; \
- } \
- } STMT_END
-# endif
+/* The whole expression just above was complemented, so here we have no need
+ * for thread synchronization, most likely it would be that this isn't a
+ * threaded build. */
+# define LOCALE_INIT
+# define LOCALE_TERM
+# define LC_NUMERIC_LOCK(cond) NOOP
+# define LC_NUMERIC_UNLOCK NOOP
+# define LOCALECONV_LOCK NOOP
+# define LOCALECONV_UNLOCK NOOP
+# define LOCALE_READ_LOCK NOOP
+# define LOCALE_READ_UNLOCK NOOP
+# define MBLEN_LOCK NOOP
+# define MBLEN_UNLOCK NOOP
+# define MBTOWC_LOCK NOOP
+# define MBTOWC_UNLOCK NOOP
+# define NL_LANGINFO_LOCK NOOP
+# define NL_LANGINFO_UNLOCK NOOP
+# define SETLOCALE_LOCK NOOP
+# define SETLOCALE_UNLOCK NOOP
+# define WCTOMB_LOCK NOOP
+# define WCTOMB_UNLOCK NOOP
+#else
-/* This is used as a generic lock for locale operations. For example this is
- * used when calling nl_langinfo() so that another thread won't zap the
- * contents of its buffer before it gets saved; and it's called when changing
- * the locale of LC_MESSAGES. On some systems the latter can cause the
- * nl_langinfo buffer to be zapped under a race condition.
- *
- * If combined with LC_NUMERIC_LOCK, calls to this and its corresponding unlock
- * should be contained entirely within the locked portion of LC_NUMERIC. This
- * mutex should be used only in very short sections of code, while
- * LC_NUMERIC_LOCK may span more operations. By always following this
- * convention, deadlock should be impossible. But if necessary, the two
- * mutexes could be combined.
- *
- * Actually, the two macros just below with the '_V' suffixes are used in just
- * a few places where there is a broken localeconv(), but otherwise things are
- * thread safe, and hence don't need locking. Just below LOCALE_LOCK and
- * LOCALE_UNLOCK are defined in terms of these for use everywhere else */
-# define LOCALE_LOCK_V \
+ /* Here, we will need critical sections in locale handling, because one or
+ * more of the above conditions are true. This could be because the
+ * platform doesn't have thread-safe locales, or that at least one of the
+ * locale-dependent functions in the core isn't thread-safe. The latter
+ * case is generally because they return a pointer to a static buffer, which
+ * may be per-process instead of per-thread. There are supposedly
+ * re-entrant, safe versions for all of them Perl currently uses (which the
+ * #if above checks for), but most platforms don't have all the needed ones
+ * available, and the Posix standard doesn't require nl_langinfo_l() to be
+ * fully thread-safe, so a Configure probe was written. localeconv_l() is
+ * uncommon, and judging by bug reports on the web, some earlier library
+ * localeconv_l versions were broken, so perhaps a probe is in order for
+ * that, but it would be a pain to write.
+ *
+ * On non-thread-safe systems, some of the above functions are vulnerable to
+ * races should another thread get control and change the locale in the
+ * middle of their execution.
+ *
+ * We currently use a single mutex for all these cases. This solves both
+ * the problem of another thread changing the locale, and the buffer being
+ * overwritten (the code copies the results to a safe place before releasing
+ * the mutex). Ideally, for locale thread-safe platforms where the only
+ * issue is another thread clobbering the function's static buffer, there
+ * would be a separate mutex for each such buffer. Otherwise, things get
+ * locked that don't need to. But, it is not expected that any of these
+ * will be called frequently, and the locked interval should be short, and
+ * modern platforms will have reentrant versions (which don't lock) for
+ * almost all of them, so khw thinks a single mutex should suffice. */
+# define LOCALE_LOCK_ \
STMT_START { \
DEBUG_Lv(PerlIO_printf(Perl_debug_log, \
"%s: %d: locking locale\n", __FILE__, __LINE__)); \
MUTEX_LOCK(&PL_locale_mutex); \
} STMT_END
-# define LOCALE_UNLOCK_V \
+# define LOCALE_UNLOCK_ \
STMT_START { \
DEBUG_Lv(PerlIO_printf(Perl_debug_log, \
"%s: %d: unlocking locale\n", __FILE__, __LINE__)); \
MUTEX_UNLOCK(&PL_locale_mutex); \
} STMT_END
-/* On windows, we just need the mutex for LOCALE_LOCK */
-# ifdef TS_W32_BROKEN_LOCALECONV
-# define LOCALE_LOCK NOOP
-# define LOCALE_UNLOCK NOOP
-# define LOCALE_INIT MUTEX_INIT(&PL_locale_mutex);
-# define LOCALE_TERM MUTEX_DESTROY(&PL_locale_mutex)
-# define LC_NUMERIC_LOCK(cond)
-# define LC_NUMERIC_UNLOCK
+ /* We do define a different macro for each case; then if we want to have
+ * separate mutexes for some of them, the only changes needed are here.
+ * Define just the necessary macros. The compiler should then croak if the
+ * #ifdef's in the code are incorrect */
+# if defined(HAS_LOCALECONV) && ( ! defined(HAS_POSIX_2008_LOCALE) \
+ || ! defined(HAS_LOCALECONV_L) \
+ || defined(TS_W32_BROKEN_LOCALECONV))
+# define LOCALECONV_LOCK LOCALE_LOCK_
+# define LOCALECONV_UNLOCK LOCALE_UNLOCK_
+# endif
+# if defined(HAS_NL_LANGINFO) && ( ! defined(HAS_THREAD_SAFE_NL_LANGINFO_L) \
+ || ! defined(HAS_POSIX_2008_LOCALE))
+# define NL_LANGINFO_LOCK LOCALE_LOCK_
+# define NL_LANGINFO_UNLOCK LOCALE_UNLOCK_
+# endif
+# if defined(HAS_MBLEN) && ! defined(HAS_MBRLEN)
+# define MBLEN_LOCK LOCALE_LOCK_
+# define MBLEN_UNLOCK LOCALE_UNLOCK_
+# endif
+# if defined(HAS_MBTOWC) && ! defined(HAS_MBRTOWC)
+# define MBTOWC_LOCK LOCALE_LOCK_
+# define MBTOWC_UNLOCK LOCALE_UNLOCK_
+# endif
+# if defined(HAS_WCTOMB) && ! defined(HAS_WCRTOMB)
+# define WCTOMB_LOCK LOCALE_LOCK_
+# define WCTOMB_UNLOCK LOCALE_UNLOCK_
+# endif
+# if defined(USE_THREAD_SAFE_LOCALE)
+ /* On locale thread-safe systems, we don't need these workarounds */
+# define LOCALE_TERM_LC_NUMERIC_ NOOP
+# define LOCALE_INIT_LC_NUMERIC_ NOOP
+# define LC_NUMERIC_LOCK(cond) NOOP
+# define LC_NUMERIC_UNLOCK NOOP
+# define LOCALE_INIT_LC_NUMERIC_ NOOP
+# define LOCALE_TERM_LC_NUMERIC_ NOOP
+
+ /* There may be instance core where we this is invoked yet should do
+ * nothing. Rather than have #ifdef's around them, define it here */
+# define SETLOCALE_LOCK NOOP
+# define SETLOCALE_UNLOCK NOOP
# else
-# define LOCALE_LOCK LOCALE_LOCK_V
-# define LOCALE_UNLOCK LOCALE_UNLOCK_V
-
- /* We also need to lock LC_NUMERIC for non-windows (hence Posix 2008)
- * systems */
-# define LOCALE_INIT STMT_START { \
- MUTEX_INIT(&PL_locale_mutex); \
- MUTEX_INIT(&PL_lc_numeric_mutex); \
- } STMT_END
-
-# define LOCALE_TERM STMT_START { \
- MUTEX_DESTROY(&PL_locale_mutex); \
- MUTEX_DESTROY(&PL_lc_numeric_mutex); \
- _LOCALE_TERM_POSIX_2008; \
- } STMT_END
-
- /* This mutex is used to create critical sections where we want the
- * LC_NUMERIC locale to be locked into either the C (standard) locale, or
- * the underlying locale, so that other threads interrupting this one don't
- * change it to the wrong state before we've had a chance to complete our
- * operation. It can stay locked over an entire printf operation, for
- * example. And so is made distinct from the LOCALE_LOCK mutex.
+# define SETLOCALE_LOCK LOCALE_LOCK_
+# define SETLOCALE_UNLOCK LOCALE_UNLOCK_
+
+ /* On platforms without per-thread locales, when another thread can switch
+ * our locale, we need another mutex to create critical sections where we
+ * want the LC_NUMERIC locale to be locked into either the C (standard)
+ * locale, or the underlying locale, so that other threads interrupting
+ * this one don't change it to the wrong state before we've had a chance to
+ * complete our operation. It can stay locked over an entire printf
+ * operation, for example. And so is made distinct from the LOCALE_LOCK
+ * mutex.
*
* This simulates kind of a general semaphore. The current thread will
* lock the mutex if the per-thread variable is zero, and then increments
@@ -6502,7 +6676,13 @@ the plain locale pragma without a parameter (S<C<use locale>>) is in effect.
*
* Clang improperly gives warnings for this, if not silenced:
* https://clang.llvm.org/docs/ThreadSafetyAnalysis.html#conditional-locks
- * */
+ *
+ * If LC_NUMERIC_LOCK is combined with one of the LOCKs above, calls to
+ * that and its corresponding unlock should be contained entirely within
+ * the locked portion of LC_NUMERIC. Those mutexes should be used only in
+ * very short sections of code, while LC_NUMERIC_LOCK may span more
+ * operations. By always following this convention, deadlock should be
+ * impossible. But if necessary, the two mutexes could be combined. */
# define LC_NUMERIC_LOCK(cond_to_panic_if_already_locked) \
CLANG_DIAG_IGNORE(-Wthread-safety) \
STMT_START { \
@@ -6544,16 +6724,36 @@ the plain locale pragma without a parameter (S<C<use locale>>) is in effect.
} STMT_END \
CLANG_DIAG_RESTORE
-# endif /* End of needs locking LC_NUMERIC */
-#else /* Below is no locale sync needed */
-# define LOCALE_INIT
-# define LOCALE_LOCK
-# define LOCALE_LOCK_V
-# define LOCALE_UNLOCK
-# define LOCALE_UNLOCK_V
-# define LC_NUMERIC_LOCK(cond)
-# define LC_NUMERIC_UNLOCK
-# define LOCALE_TERM
+# define LOCALE_INIT_LC_NUMERIC_ MUTEX_INIT(&PL_lc_numeric_mutex)
+# define LOCALE_TERM_LC_NUMERIC_ MUTEX_DESTROY(&PL_lc_numeric_mutex)
+# endif
+
+# ifdef USE_POSIX_2008_LOCALE
+ /* We have a locale object holding the 'C' locale for Posix 2008 */
+# define LOCALE_TERM_POSIX_2008_ \
+ STMT_START { \
+ if (PL_C_locale_obj) { \
+ /* Make sure we aren't using the locale \
+ * space we are about to free */ \
+ uselocale(LC_GLOBAL_LOCALE); \
+ freelocale(PL_C_locale_obj); \
+ PL_C_locale_obj = (locale_t) NULL; \
+ } \
+ } STMT_END
+# else
+# define LOCALE_TERM_POSIX_2008_ NOOP
+# endif
+
+# define LOCALE_INIT STMT_START { \
+ MUTEX_INIT(&PL_locale_mutex); \
+ LOCALE_INIT_LC_NUMERIC_; \
+ } STMT_END
+
+# define LOCALE_TERM STMT_START { \
+ MUTEX_DESTROY(&PL_locale_mutex); \
+ LOCALE_TERM_LC_NUMERIC_; \
+ LOCALE_TERM_POSIX_2008_; \
+ } STMT_END
#endif
#ifdef USE_LOCALE_NUMERIC
@@ -6564,7 +6764,7 @@ the plain locale pragma without a parameter (S<C<use locale>>) is in effect.
* operations used by Perl, namely the decimal point, and even the thousands
* separator.)
-=head1 Locale-related functions and macros
+=for apidoc_section $locale
=for apidoc Amn|void|DECLARATION_FOR_LC_NUMERIC_MANIPULATION
@@ -6803,8 +7003,8 @@ cannot have changed since the precalculation.
# define LOCK_LC_NUMERIC_STANDARD() \
STMT_START { \
DEBUG_Lv(PerlIO_printf(Perl_debug_log, \
- "%s: %d: lock lc_numeric_standard: new depth=%d\n", \
- __FILE__, __LINE__, PL_numeric_standard + 1)); \
+ "%s: %d: lc_numeric_standard now locked to depth %d\n", \
+ __FILE__, __LINE__, PL_numeric_standard)); \
__ASSERT_(PL_numeric_standard) \
PL_numeric_standard++; \
} STMT_END
@@ -6818,8 +7018,13 @@ cannot have changed since the precalculation.
assert(0); \
} \
DEBUG_Lv(PerlIO_printf(Perl_debug_log, \
- "%s: %d: lc_numeric_standard decrement lock, new depth=%d\n", \
- __FILE__, __LINE__, PL_numeric_standard)); \
+ "%s: %d: ", __FILE__, __LINE__); \
+ if (PL_numeric_standard <= 1) \
+ PerlIO_printf(Perl_debug_log, \
+ "lc_numeric_standard now unlocked\n");\
+ else PerlIO_printf(Perl_debug_log, \
+ "lc_numeric_standard lock decremented to depth %d\n", \
+ PL_numeric_standard););\
} STMT_END
# define WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric, block) \
@@ -6853,11 +7058,80 @@ cannot have changed since the precalculation.
#endif /* !USE_LOCALE_NUMERIC */
+#ifdef USE_ITHREADS
+# define ENV_LOCK PERL_WRITE_LOCK(&PL_env_mutex)
+# define ENV_UNLOCK PERL_WRITE_UNLOCK(&PL_env_mutex)
+# define ENV_READ_LOCK PERL_READ_LOCK(&PL_env_mutex)
+# define ENV_READ_UNLOCK PERL_READ_UNLOCK(&PL_env_mutex)
+# define ENV_INIT PERL_RW_MUTEX_INIT(&PL_env_mutex)
+# define ENV_TERM PERL_RW_MUTEX_DESTROY(&PL_env_mutex)
+
+ /* On platforms where the static buffer contained in getenv() is per-thread
+ * rather than process-wide, another thread executing a getenv() at the same
+ * time won't destroy ours before we have copied the result safely away and
+ * unlocked the mutex. On such platforms (which is most), we can have many
+ * readers of the environment at the same time. */
+# ifdef GETENV_PRESERVES_OTHER_THREAD
+# define GETENV_LOCK ENV_READ_LOCK
+# define GETENV_UNLOCK ENV_READ_UNLOCK
+# else
+ /* If, on the other hand, another thread could zap our getenv() return, we
+ * need to keep them from executing until we are done */
+# define GETENV_LOCK ENV_LOCK
+# define GETENV_UNLOCK ENV_UNLOCK
+# endif
+#else
+# define ENV_LOCK NOOP
+# define ENV_UNLOCK NOOP
+# define ENV_READ_LOCK NOOP
+# define ENV_READ_UNLOCK NOOP
+# define ENV_INIT NOOP
+# define ENV_TERM NOOP
+# define GETENV_LOCK NOOP
+# define GETENV_UNLOCK NOOP
+#endif
+
+#ifndef PERL_NO_INLINE_FUNCTIONS
+/* Static inline funcs that depend on includes and declarations above.
+ Some of these reference functions in the perl object files, and some
+ compilers aren't smart enough to eliminate unused static inline
+ functions, so including this file in source code can cause link errors
+ even if the source code uses none of the functions. Hence including these
+ can be suppressed by setting PERL_NO_INLINE_FUNCTIONS. Doing this will
+ (obviously) result in unworkable XS code, but allows simple probing code
+ to continue to work, because it permits tests to include the perl headers
+ for definitions without creating a link dependency on the perl library
+ (which may not exist yet).
+*/
+
+START_EXTERN_C
+
+# include "inline.h"
+
+END_EXTERN_C
+
+#endif
+
+/* Some critical sections need to lock both the locale and the environment.
+ * XXX khw intends to change this to lock both mutexes, but that brings up
+ * issues of potential deadlock, so should be done at the beginning of a
+ * development cycle. So for now, it just locks the environment. Note that
+ * many modern platforms are locale-thread-safe anyway, so locking the locale
+ * mutex is a no-op anyway */
+#define ENV_LOCALE_LOCK ENV_LOCK
+#define ENV_LOCALE_UNLOCK ENV_UNLOCK
+
+/* And some critical sections care only that no one else is writing either the
+ * locale nor the environment. XXX Again this is for the future. This can be
+ * simulated with using COND_WAIT in thread.h */
+#define ENV_LOCALE_READ_LOCK ENV_LOCALE_LOCK
+#define ENV_LOCALE_READ_UNLOCK ENV_LOCALE_UNLOCK
+
#define Atof my_atof
/*
-=head1 Numeric functions
+=for apidoc_section $numeric
=for apidoc AmTR|NV|Strtod|NN const char * const s|NULLOK char ** e
@@ -7049,15 +7323,9 @@ C<strtoul>.
/* START_MY_CXT must appear in all extensions that define a my_cxt_t structure,
* right after the definition (i.e. at file scope). The non-threads
* case below uses it to declare the data as static. */
-# ifdef PERL_GLOBAL_STRUCT_PRIVATE
-# define START_MY_CXT
-# define MY_CXT_INDEX Perl_my_cxt_index(aTHX_ MY_CXT_KEY)
-# define MY_CXT_INIT_ARG MY_CXT_KEY
-# else
# define START_MY_CXT static int my_cxt_index = -1;
# define MY_CXT_INDEX my_cxt_index
# define MY_CXT_INIT_ARG &my_cxt_index
-# endif /* #ifdef PERL_GLOBAL_STRUCT_PRIVATE */
/* Creates and zeroes the per-interpreter data.
* (We allocate my_cxtp in a Perl SV so that it will be released when
@@ -7101,9 +7369,7 @@ C<strtoul>.
# define _aMY_CXT ,aMY_CXT
#else /* PERL_IMPLICIT_CONTEXT */
-
# define START_MY_CXT static my_cxt_t my_cxt;
-# define dMY_CXT_SV dNOOP
# define dMY_CXT dNOOP
# define dMY_CXT_INTERP(my_perl) dNOOP
# define MY_CXT_INIT NOOP
@@ -7191,7 +7457,7 @@ EXTERN_C int flock(int fd, int op);
#define IS_NUMBER_TRAILING 0x40 /* number has trailing trash */
/*
-=head1 Numeric functions
+=for apidoc_section $numeric
=for apidoc AmdR|bool|GROK_NUMERIC_RADIX|NN const char **sp|NN const char *send
@@ -7261,6 +7527,8 @@ extern void moncontrol(int);
#define PERL_MAGIC_UTF8_CACHESIZE 2
+#ifdef PERL_CORE
+
#define PERL_UNICODE_STDIN_FLAG 0x0001
#define PERL_UNICODE_STDOUT_FLAG 0x0002
#define PERL_UNICODE_STDERR_FLAG 0x0004
@@ -7299,12 +7567,23 @@ extern void moncontrol(int);
#define PERL_UNICODE_WIDESYSCALLS 'W'
#define PERL_UNICODE_UTF8CACHEASSERT 'a'
+#endif
+
+/*
+=for apidoc_section $signals
+=for apidoc Amn|U32|PERL_SIGNALS_UNSAFE_FLAG
+If this bit in C<PL_signals> is set, the system is uing the pre-Perl 5.8
+unsafe signals. See L<perlrun/PERL_SIGNALS> and L<perlipc/Deferred Signals
+(Safe Signals)>.
+
+=cut
+*/
#define PERL_SIGNALS_UNSAFE_FLAG 0x0001
/*
-=head1 Numeric functions
+=for apidoc_section $numeric
-=for apidoc Am|int|PERL_ABS|int
+=for apidoc Am|int|PERL_ABS|int x
Typeless C<abs> or C<fabs>, I<etc>. (The usage below indicates it is for
integers, but it works for any type.) Use instead of these, since the C
@@ -7334,7 +7613,7 @@ so no C<x++>.
/*
-=head1 Miscellaneous Functions
+=for apidoc_section $utility
=for apidoc Am|bool|IS_SAFE_SYSCALL|NN const char *pv|STRLEN len|NN const char *what|NN const char *op_name
diff --git a/Master/tlpkg/tlperl/lib/CORE/perl_inc_macro.h b/Master/tlpkg/tlperl/lib/CORE/perl_inc_macro.h
index 5a2f20dfaeb..b9cd60947e1 100644
--- a/Master/tlpkg/tlperl/lib/CORE/perl_inc_macro.h
+++ b/Master/tlpkg/tlperl/lib/CORE/perl_inc_macro.h
@@ -24,7 +24,7 @@
#ifdef APPLLIB_EXP
# define INCPUSH_APPLLIB_EXP S_incpush_use_sep(aTHX_ STR_WITH_LEN(APPLLIB_EXP), \
- INCPUSH_ADD_SUB_DIRS|INCPUSH_CAN_RELOCATE);
+ INCPUSH_ADD_SUB_DIRS|INCPUSH_CAN_RELOCATE);
#endif
#ifdef SITEARCH_EXP
@@ -32,7 +32,7 @@
* DLL-based path intuition to work correctly */
# if !defined(WIN32)
# define INCPUSH_SITEARCH_EXP S_incpush_use_sep(aTHX_ STR_WITH_LEN(SITEARCH_EXP), \
- INCPUSH_CAN_RELOCATE);
+ INCPUSH_CAN_RELOCATE);
# endif
#endif
@@ -40,10 +40,10 @@
# if defined(WIN32)
/* this picks up sitearch as well */
# define INCPUSH_SITELIB_EXP s = PerlEnv_sitelib_path(PERL_FS_VERSION, &len); \
- if (s) incpush_use_sep(s, len, INCPUSH_ADD_SUB_DIRS|INCPUSH_CAN_RELOCATE);
+ if (s) incpush_use_sep(s, len, INCPUSH_ADD_SUB_DIRS|INCPUSH_CAN_RELOCATE);
# else
# define INCPUSH_SITELIB_EXP S_incpush_use_sep(aTHX_ STR_WITH_LEN(SITELIB_EXP), \
- INCPUSH_CAN_RELOCATE);
+ INCPUSH_CAN_RELOCATE);
# endif
#endif
@@ -59,7 +59,7 @@
# if defined(WIN32)
/* this picks up vendorarch as well */
# define INCPUSH_PERL_VENDORLIB_EXP s = PerlEnv_vendorlib_path(PERL_FS_VERSION, &len); \
- if (s) incpush_use_sep(s, len, INCPUSH_ADD_SUB_DIRS|INCPUSH_CAN_RELOCATE);
+ if (s) incpush_use_sep(s, len, INCPUSH_ADD_SUB_DIRS|INCPUSH_CAN_RELOCATE);
# else
# define INCPUSH_PERL_VENDORLIB_EXP S_incpush_use_sep(aTHX_ STR_WITH_LEN(PERL_VENDORLIB_EXP), INCPUSH_CAN_RELOCATE);
# endif
@@ -85,7 +85,7 @@
#ifdef PERL_OTHERLIBDIRS
# define INCPUSH_PERL_OTHERLIBDIRS S_incpush_use_sep(aTHX_ STR_WITH_LEN(PERL_OTHERLIBDIRS), \
- INCPUSH_ADD_VERSIONED_SUB_DIRS|INCPUSH_NOT_BASEDIR|INCPUSH_CAN_RELOCATE);
+ INCPUSH_ADD_VERSIONED_SUB_DIRS|INCPUSH_NOT_BASEDIR|INCPUSH_CAN_RELOCATE);
#endif
@@ -106,17 +106,17 @@
# define _INCPUSH_PERL5LIB_ADD _INCPUSH_PERL5LIB_IF incpush_use_sep(perl5lib, 0, INCPUSH_ADD_OLD_VERS|INCPUSH_NOT_BASEDIR);
#else
/* VMS */
- /* Treat PERL5?LIB as a possible search list logical name -- the
- * "natural" VMS idiom for a Unix path string. We allow each
- * element to be a set of |-separated directories for compatibility.
- */
+ /* Treat PERL5?LIB as a possible search list logical name -- the
+ * "natural" VMS idiom for a Unix path string. We allow each
+ * element to be a set of |-separated directories for compatibility.
+ */
# define _INCPUSH_PERL5LIB_ADD char buf[256]; \
- int idx = 0; \
- if (vmstrnenv("PERL5LIB",buf,0,NULL,0)) \
- do { \
- incpush_use_sep(buf, 0, \
- INCPUSH_ADD_OLD_VERS|INCPUSH_NOT_BASEDIR); \
- } while (vmstrnenv("PERL5LIB",buf,++idx,NULL,0));
+ int idx = 0; \
+ if (vmstrnenv("PERL5LIB",buf,0,NULL,0)) \
+ do { \
+ incpush_use_sep(buf, 0, \
+ INCPUSH_ADD_OLD_VERS|INCPUSH_NOT_BASEDIR); \
+ } while (vmstrnenv("PERL5LIB",buf,++idx,NULL,0));
#endif
/* this macro is special and use submacros from above */
@@ -127,25 +127,25 @@
*/
#ifdef APPLLIB_EXP
# define INCPUSH_APPLLIB_OLD_EXP S_incpush_use_sep(aTHX_ STR_WITH_LEN(APPLLIB_EXP), \
- INCPUSH_ADD_OLD_VERS|INCPUSH_NOT_BASEDIR|INCPUSH_CAN_RELOCATE);
+ INCPUSH_ADD_OLD_VERS|INCPUSH_NOT_BASEDIR|INCPUSH_CAN_RELOCATE);
#endif
#if defined(SITELIB_STEM) && defined(PERL_INC_VERSION_LIST)
/* Search for version-specific dirs below here */
# define INCPUSH_SITELIB_STEM S_incpush_use_sep(aTHX_ STR_WITH_LEN(SITELIB_STEM), \
- INCPUSH_ADD_OLD_VERS|INCPUSH_CAN_RELOCATE);
+ INCPUSH_ADD_OLD_VERS|INCPUSH_CAN_RELOCATE);
#endif
#if defined(PERL_VENDORLIB_STEM) && defined(PERL_INC_VERSION_LIST)
/* Search for version-specific dirs below here */
# define INCPUSH_PERL_VENDORLIB_STEM S_incpush_use_sep(aTHX_ STR_WITH_LEN(PERL_VENDORLIB_STEM), \
- INCPUSH_ADD_OLD_VERS|INCPUSH_CAN_RELOCATE);
+ INCPUSH_ADD_OLD_VERS|INCPUSH_CAN_RELOCATE);
#endif
#ifdef PERL_OTHERLIBDIRS
# define INCPUSH_PERL_OTHERLIBDIRS_ARCHONLY S_incpush_use_sep(aTHX_ STR_WITH_LEN(PERL_OTHERLIBDIRS), \
- INCPUSH_ADD_OLD_VERS|INCPUSH_ADD_ARCHONLY_SUB_DIRS|INCPUSH_CAN_RELOCATE);
+ INCPUSH_ADD_OLD_VERS|INCPUSH_ADD_ARCHONLY_SUB_DIRS|INCPUSH_CAN_RELOCATE);
#endif
diff --git a/Master/tlpkg/tlperl/lib/CORE/perl_siphash.h b/Master/tlpkg/tlperl/lib/CORE/perl_siphash.h
new file mode 100755
index 00000000000..d3d71e77101
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/CORE/perl_siphash.h
@@ -0,0 +1,127 @@
+/* This is SipHash by Jean-Philippe Aumasson and Daniel J. Bernstein.
+ * The authors claim it is relatively secure compared to the alternatives
+ * and that performance wise it is a suitable hash for languages like Perl.
+ * See:
+ *
+ * https://www.131002.net/siphash/
+ *
+ * This implementation seems to perform slightly slower than one-at-a-time for
+ * short keys, but degrades slower for longer keys. Murmur Hash outperforms it
+ * regardless of keys size.
+ *
+ * It is 64 bit only.
+ */
+
+#ifdef CAN64BITHASH
+
+#define SIPROUND \
+ STMT_START { \
+ v0 += v1; v1=ROTL64(v1,13); v1 ^= v0; v0=ROTL64(v0,32); \
+ v2 += v3; v3=ROTL64(v3,16); v3 ^= v2; \
+ v0 += v3; v3=ROTL64(v3,21); v3 ^= v0; \
+ v2 += v1; v1=ROTL64(v1,17); v1 ^= v2; v2=ROTL64(v2,32); \
+ } STMT_END
+
+#define SIPHASH_SEED_STATE(key,v0,v1,v2,v3) \
+do { \
+ v0 = v2 = U8TO64_LE(key + 0); \
+ v1 = v3 = U8TO64_LE(key + 8); \
+ /* "somepseudorandomlygeneratedbytes" */ \
+ v0 ^= UINT64_C(0x736f6d6570736575); \
+ v1 ^= UINT64_C(0x646f72616e646f6d); \
+ v2 ^= UINT64_C(0x6c7967656e657261); \
+ v3 ^= UINT64_C(0x7465646279746573); \
+} while (0)
+
+PERL_STATIC_INLINE
+void S_perl_siphash_seed_state(const unsigned char * const seed_buf, unsigned char * state_buf) {
+ U64 *v= (U64*) state_buf;
+ SIPHASH_SEED_STATE(seed_buf, v[0],v[1],v[2],v[3]);
+}
+
+#define PERL_SIPHASH_FNC(FNC,SIP_ROUNDS,SIP_FINAL_ROUNDS) \
+PERL_STATIC_INLINE U64 \
+FNC ## _with_state_64 \
+ (const unsigned char * const state, const unsigned char *in, const STRLEN inlen) \
+{ \
+ const int left = inlen & 7; \
+ const U8 *end = in + inlen - left; \
+ \
+ U64 b = ( ( U64 )(inlen) ) << 56; \
+ U64 m; \
+ U64 v0 = U8TO64_LE(state); \
+ U64 v1 = U8TO64_LE(state+8); \
+ U64 v2 = U8TO64_LE(state+16); \
+ U64 v3 = U8TO64_LE(state+24); \
+ \
+ for ( ; in != end; in += 8 ) \
+ { \
+ m = U8TO64_LE( in ); \
+ v3 ^= m; \
+ \
+ SIP_ROUNDS; \
+ \
+ v0 ^= m; \
+ } \
+ \
+ switch( left ) \
+ { \
+ case 7: b |= ( ( U64 )in[ 6] ) << 48; /*FALLTHROUGH*/ \
+ case 6: b |= ( ( U64 )in[ 5] ) << 40; /*FALLTHROUGH*/ \
+ case 5: b |= ( ( U64 )in[ 4] ) << 32; /*FALLTHROUGH*/ \
+ case 4: b |= ( ( U64 )in[ 3] ) << 24; /*FALLTHROUGH*/ \
+ case 3: b |= ( ( U64 )in[ 2] ) << 16; /*FALLTHROUGH*/ \
+ case 2: b |= ( ( U64 )in[ 1] ) << 8; /*FALLTHROUGH*/ \
+ case 1: b |= ( ( U64 )in[ 0] ); break; \
+ case 0: break; \
+ } \
+ \
+ v3 ^= b; \
+ \
+ SIP_ROUNDS; \
+ \
+ v0 ^= b; \
+ \
+ v2 ^= 0xff; \
+ \
+ SIP_FINAL_ROUNDS \
+ \
+ b = v0 ^ v1 ^ v2 ^ v3; \
+ return b; \
+} \
+ \
+PERL_STATIC_INLINE U32 \
+FNC ## _with_state \
+ (const unsigned char * const state, const unsigned char *in, const STRLEN inlen) \
+{ \
+ union { \
+ U64 h64; \
+ U32 h32[2]; \
+ } h; \
+ h.h64= FNC ## _with_state_64(state,in,inlen); \
+ return h.h32[0] ^ h.h32[1]; \
+} \
+ \
+ \
+PERL_STATIC_INLINE U32 \
+FNC (const unsigned char * const seed, const unsigned char *in, const STRLEN inlen) \
+{ \
+ U64 state[4]; \
+ SIPHASH_SEED_STATE(seed,state[0],state[1],state[2],state[3]); \
+ return FNC ## _with_state((U8*)state,in,inlen); \
+}
+
+
+PERL_SIPHASH_FNC(
+ S_perl_hash_siphash_1_3
+ ,SIPROUND;
+ ,SIPROUND;SIPROUND;SIPROUND;
+)
+
+PERL_SIPHASH_FNC(
+ S_perl_hash_siphash_2_4
+ ,SIPROUND;SIPROUND;
+ ,SIPROUND;SIPROUND;SIPROUND;SIPROUND;
+)
+
+#endif /* defined(CAN64BITHASH) */
diff --git a/Master/tlpkg/tlperl/lib/CORE/perlapi.h b/Master/tlpkg/tlperl/lib/CORE/perlapi.h
index 305c11d4133..0d66a68371c 100644
--- a/Master/tlpkg/tlperl/lib/CORE/perlapi.h
+++ b/Master/tlpkg/tlperl/lib/CORE/perlapi.h
@@ -1,4 +1,4 @@
-/* -*- buffer-read-only: t -*-
+/*
*
* perlapi.h
*
@@ -8,221 +8,15 @@
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
*
- * !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- * This file is built by regen/embed.pl from data in embed.fnc,
- * regen/embed.pl, regen/opcodes, intrpvar.h and perlvars.h.
- * Any changes made here will be lost!
- *
- * Edit those files and run 'make regen_headers' to effect changes.
*/
-/* declare accessor functions for Perl variables */
+/*
+ * This file used to declare accessor functions for Perl variables
+ * when PERL_GLOBAL_STRUCT was enabled, but that no longer exists.
+ * This file is kept for backwards compatiblity with XS code that
+ * might include it.
+ */
#ifndef __perlapi_h__
#define __perlapi_h__
-#if defined (MULTIPLICITY) && defined (PERL_GLOBAL_STRUCT)
-
-START_EXTERN_C
-
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-#define PERLVAR(p,v,t) EXTERN_C t* Perl_##p##v##_ptr(pTHX);
-#define PERLVARA(p,v,n,t) typedef t PL_##v##_t[n]; \
- EXTERN_C PL_##v##_t* Perl_##p##v##_ptr(pTHX);
-#define PERLVARI(p,v,t,i) PERLVAR(p,v,t)
-#define PERLVARIC(p,v,t,i) PERLVAR(p,v, const t)
-
-#include "perlvars.h"
-
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-
-END_EXTERN_C
-
-#if defined(PERL_CORE)
-
-/* accessor functions for Perl "global" variables */
-
-/* these need to be mentioned here, or most linkers won't put them in
- the perl executable */
-
-#ifndef PERL_NO_FORCE_LINK
-
-START_EXTERN_C
-
-#ifndef DOINIT
-EXTCONST void * const PL_force_link_funcs[];
-#else
-EXTCONST void * const PL_force_link_funcs[] = {
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-#define PERLVAR(p,v,t) (void*)Perl_##p##v##_ptr,
-#define PERLVARA(p,v,n,t) PERLVAR(p,v,t)
-#define PERLVARI(p,v,t,i) PERLVAR(p,v,t)
-#define PERLVARIC(p,v,t,i) PERLVAR(p,v,t)
-
-/* In Tru64 (__DEC && __osf__) the cc option -std1 causes that one
- * cannot cast between void pointers and function pointers without
- * info level warnings. The PL_force_link_funcs[] would cause a few
- * hundred of those warnings. In code one can circumnavigate this by using
- * unions that overlay the different pointers, but in declarations one
- * cannot use this trick. Therefore we just disable the warning here
- * for the duration of the PL_force_link_funcs[] declaration. */
-
-#if defined(__DECC) && defined(__osf__)
-#pragma message save
-#pragma message disable (nonstandcast)
-#endif
-
-#include "perlvars.h"
-
-#if defined(__DECC) && defined(__osf__)
-#pragma message restore
-#endif
-
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-};
-#endif /* DOINIT */
-
-END_EXTERN_C
-
-#endif /* PERL_NO_FORCE_LINK */
-
-#else /* !PERL_CORE */
-
-#undef PL_C_locale_obj
-#define PL_C_locale_obj (*Perl_GC_locale_obj_ptr(NULL))
-#undef PL_appctx
-#define PL_appctx (*Perl_Gappctx_ptr(NULL))
-#undef PL_check
-#define PL_check (*Perl_Gcheck_ptr(NULL))
-#undef PL_check_mutex
-#define PL_check_mutex (*Perl_Gcheck_mutex_ptr(NULL))
-#undef PL_csighandler1p
-#define PL_csighandler1p (*Perl_Gcsighandler1p_ptr(NULL))
-#undef PL_csighandler3p
-#define PL_csighandler3p (*Perl_Gcsighandler3p_ptr(NULL))
-#undef PL_csighandlerp
-#define PL_csighandlerp (*Perl_Gcsighandlerp_ptr(NULL))
-#undef PL_curinterp
-#define PL_curinterp (*Perl_Gcurinterp_ptr(NULL))
-#undef PL_do_undump
-#define PL_do_undump (*Perl_Gdo_undump_ptr(NULL))
-#undef PL_dollarzero_mutex
-#define PL_dollarzero_mutex (*Perl_Gdollarzero_mutex_ptr(NULL))
-#undef PL_env_mutex
-#define PL_env_mutex (*Perl_Genv_mutex_ptr(NULL))
-#undef PL_fold_locale
-#define PL_fold_locale (*Perl_Gfold_locale_ptr(NULL))
-#undef PL_hash_chars
-#define PL_hash_chars (*Perl_Ghash_chars_ptr(NULL))
-#undef PL_hash_seed
-#define PL_hash_seed (*Perl_Ghash_seed_ptr(NULL))
-#undef PL_hash_seed_set
-#define PL_hash_seed_set (*Perl_Ghash_seed_set_ptr(NULL))
-#undef PL_hash_state
-#define PL_hash_state (*Perl_Ghash_state_ptr(NULL))
-#undef PL_hints_mutex
-#define PL_hints_mutex (*Perl_Ghints_mutex_ptr(NULL))
-#undef PL_keyword_plugin
-#define PL_keyword_plugin (*Perl_Gkeyword_plugin_ptr(NULL))
-#undef PL_keyword_plugin_mutex
-#define PL_keyword_plugin_mutex (*Perl_Gkeyword_plugin_mutex_ptr(NULL))
-#undef PL_lc_numeric_mutex
-#define PL_lc_numeric_mutex (*Perl_Glc_numeric_mutex_ptr(NULL))
-#undef PL_locale_mutex
-#define PL_locale_mutex (*Perl_Glocale_mutex_ptr(NULL))
-#undef PL_malloc_mutex
-#define PL_malloc_mutex (*Perl_Gmalloc_mutex_ptr(NULL))
-#undef PL_mmap_page_size
-#define PL_mmap_page_size (*Perl_Gmmap_page_size_ptr(NULL))
-#undef PL_my_ctx_mutex
-#define PL_my_ctx_mutex (*Perl_Gmy_ctx_mutex_ptr(NULL))
-#undef PL_my_cxt_index
-#define PL_my_cxt_index (*Perl_Gmy_cxt_index_ptr(NULL))
-#undef PL_my_cxt_keys
-#define PL_my_cxt_keys (*Perl_Gmy_cxt_keys_ptr(NULL))
-#undef PL_my_cxt_keys_size
-#define PL_my_cxt_keys_size (*Perl_Gmy_cxt_keys_size_ptr(NULL))
-#undef PL_op_mutex
-#define PL_op_mutex (*Perl_Gop_mutex_ptr(NULL))
-#undef PL_op_seq
-#define PL_op_seq (*Perl_Gop_seq_ptr(NULL))
-#undef PL_op_sequence
-#define PL_op_sequence (*Perl_Gop_sequence_ptr(NULL))
-#undef PL_perlio_debug_fd
-#define PL_perlio_debug_fd (*Perl_Gperlio_debug_fd_ptr(NULL))
-#undef PL_perlio_fd_refcnt
-#define PL_perlio_fd_refcnt (*Perl_Gperlio_fd_refcnt_ptr(NULL))
-#undef PL_perlio_fd_refcnt_size
-#define PL_perlio_fd_refcnt_size (*Perl_Gperlio_fd_refcnt_size_ptr(NULL))
-#undef PL_perlio_mutex
-#define PL_perlio_mutex (*Perl_Gperlio_mutex_ptr(NULL))
-#undef PL_perllib_sep
-#define PL_perllib_sep (*Perl_Gperllib_sep_ptr(NULL))
-#undef PL_ppaddr
-#define PL_ppaddr (*Perl_Gppaddr_ptr(NULL))
-#undef PL_sh_path
-#define PL_sh_path (*Perl_Gsh_path_ptr(NULL))
-#undef PL_sig_defaulting
-#define PL_sig_defaulting (*Perl_Gsig_defaulting_ptr(NULL))
-#undef PL_sig_handlers_initted
-#define PL_sig_handlers_initted (*Perl_Gsig_handlers_initted_ptr(NULL))
-#undef PL_sig_ignoring
-#define PL_sig_ignoring (*Perl_Gsig_ignoring_ptr(NULL))
-#undef PL_sig_trapped
-#define PL_sig_trapped (*Perl_Gsig_trapped_ptr(NULL))
-#undef PL_sigfpe_saved
-#define PL_sigfpe_saved (*Perl_Gsigfpe_saved_ptr(NULL))
-#undef PL_strategy_accept
-#define PL_strategy_accept (*Perl_Gstrategy_accept_ptr(NULL))
-#undef PL_strategy_dup
-#define PL_strategy_dup (*Perl_Gstrategy_dup_ptr(NULL))
-#undef PL_strategy_dup2
-#define PL_strategy_dup2 (*Perl_Gstrategy_dup2_ptr(NULL))
-#undef PL_strategy_mkstemp
-#define PL_strategy_mkstemp (*Perl_Gstrategy_mkstemp_ptr(NULL))
-#undef PL_strategy_open
-#define PL_strategy_open (*Perl_Gstrategy_open_ptr(NULL))
-#undef PL_strategy_open3
-#define PL_strategy_open3 (*Perl_Gstrategy_open3_ptr(NULL))
-#undef PL_strategy_pipe
-#define PL_strategy_pipe (*Perl_Gstrategy_pipe_ptr(NULL))
-#undef PL_strategy_socket
-#define PL_strategy_socket (*Perl_Gstrategy_socket_ptr(NULL))
-#undef PL_strategy_socketpair
-#define PL_strategy_socketpair (*Perl_Gstrategy_socketpair_ptr(NULL))
-#undef PL_sv_placeholder
-#define PL_sv_placeholder (*Perl_Gsv_placeholder_ptr(NULL))
-#undef PL_thr_key
-#define PL_thr_key (*Perl_Gthr_key_ptr(NULL))
-#undef PL_timesbase
-#define PL_timesbase (*Perl_Gtimesbase_ptr(NULL))
-#undef PL_use_safe_putenv
-#define PL_use_safe_putenv (*Perl_Guse_safe_putenv_ptr(NULL))
-#undef PL_user_def_props
-#define PL_user_def_props (*Perl_Guser_def_props_ptr(NULL))
-#undef PL_user_def_props_aTHX
-#define PL_user_def_props_aTHX (*Perl_Guser_def_props_aTHX_ptr(NULL))
-#undef PL_user_prop_mutex
-#define PL_user_prop_mutex (*Perl_Guser_prop_mutex_ptr(NULL))
-#undef PL_veto_cleanup
-#define PL_veto_cleanup (*Perl_Gveto_cleanup_ptr(NULL))
-#undef PL_watch_pvx
-#define PL_watch_pvx (*Perl_Gwatch_pvx_ptr(NULL))
-
-#endif /* !PERL_CORE */
-#endif /* MULTIPLICITY && PERL_GLOBAL_STRUCT */
-
#endif /* __perlapi_h__ */
-
-/* ex: set ro: */
diff --git a/Master/tlpkg/tlperl/lib/CORE/perlhost.h b/Master/tlpkg/tlperl/lib/CORE/perlhost.h
index f5ffca04e4a..5ce496590f2 100644
--- a/Master/tlpkg/tlperl/lib/CORE/perlhost.h
+++ b/Master/tlpkg/tlperl/lib/CORE/perlhost.h
@@ -32,10 +32,10 @@ public:
/* Constructors */
CPerlHost(void);
CPerlHost(struct IPerlMem** ppMem, struct IPerlMem** ppMemShared,
- struct IPerlMem** ppMemParse, struct IPerlEnv** ppEnv,
- struct IPerlStdIO** ppStdIO, struct IPerlLIO** ppLIO,
- struct IPerlDir** ppDir, struct IPerlSock** ppSock,
- struct IPerlProc** ppProc);
+ struct IPerlMem** ppMemParse, struct IPerlEnv** ppEnv,
+ struct IPerlStdIO** ppStdIO, struct IPerlLIO** ppLIO,
+ struct IPerlDir** ppDir, struct IPerlSock** ppSock,
+ struct IPerlProc** ppProc);
CPerlHost(CPerlHost& host);
~CPerlHost(void);
@@ -61,11 +61,11 @@ public:
inline void Free(void* ptr) { m_pVMem->Free(ptr); };
inline void* Calloc(size_t num, size_t size)
{
- size_t count = num*size;
- void* lpVoid = Malloc(count);
- if (lpVoid)
- ZeroMemory(lpVoid, count);
- return lpVoid;
+ size_t count = num*size;
+ void* lpVoid = Malloc(count);
+ if (lpVoid)
+ ZeroMemory(lpVoid, count);
+ return lpVoid;
};
inline void GetLock(void) { m_pVMem->GetLock(); };
inline void FreeLock(void) { m_pVMem->FreeLock(); };
@@ -78,33 +78,33 @@ public:
inline int IsLockedShared(void) { return m_pVMemShared->IsLocked(); };
inline void* MallocShared(size_t size)
{
- void *result;
- GetLockShared();
- result = m_pVMemShared->Malloc(size);
- FreeLockShared();
- return result;
+ void *result;
+ GetLockShared();
+ result = m_pVMemShared->Malloc(size);
+ FreeLockShared();
+ return result;
};
inline void* ReallocShared(void* ptr, size_t size)
{
- void *result;
- GetLockShared();
- result = m_pVMemShared->Realloc(ptr, size);
- FreeLockShared();
- return result;
+ void *result;
+ GetLockShared();
+ result = m_pVMemShared->Realloc(ptr, size);
+ FreeLockShared();
+ return result;
};
inline void FreeShared(void* ptr)
{
- GetLockShared();
- m_pVMemShared->Free(ptr);
- FreeLockShared();
+ GetLockShared();
+ m_pVMemShared->Free(ptr);
+ FreeLockShared();
};
inline void* CallocShared(size_t num, size_t size)
{
- size_t count = num*size;
- void* lpVoid = MallocShared(count);
- if (lpVoid)
- ZeroMemory(lpVoid, count);
- return lpVoid;
+ size_t count = num*size;
+ void* lpVoid = MallocShared(count);
+ if (lpVoid)
+ ZeroMemory(lpVoid, count);
+ return lpVoid;
};
/* IPerlMemParse */
@@ -119,11 +119,11 @@ public:
inline void FreeParse(void* ptr) { m_pVMemParse->Free(ptr); };
inline void* CallocParse(size_t num, size_t size)
{
- size_t count = num*size;
- void* lpVoid = MallocParse(count);
- if (lpVoid)
- ZeroMemory(lpVoid, count);
- return lpVoid;
+ size_t count = num*size;
+ void* lpVoid = MallocParse(count);
+ if (lpVoid)
+ ZeroMemory(lpVoid, count);
+ return lpVoid;
};
/* IPerlEnv */
@@ -131,11 +131,11 @@ public:
int Putenv(const char *envstring);
inline char *Getenv(const char *varname, unsigned long *len)
{
- *len = 0;
- char *e = Getenv(varname);
- if (e)
- *len = strlen(e);
- return e;
+ *len = 0;
+ char *e = Getenv(varname);
+ if (e)
+ *len = strlen(e);
+ return e;
}
void* CreateChildEnv(void) { return CreateLocalEnvironmentStrings(*m_pvDir); };
void FreeChildEnv(void* pStr) { FreeLocalEnvironmentStrings((char*)pStr); };
@@ -146,12 +146,12 @@ public:
inline LPSTR GetIndex(DWORD &dwIndex)
{
- if(dwIndex < m_dwEnvCount)
- {
- ++dwIndex;
- return m_lppEnvList[dwIndex-1];
- }
- return NULL;
+ if(dwIndex < m_dwEnvCount)
+ {
+ ++dwIndex;
+ return m_lppEnvList[dwIndex-1];
+ }
+ return NULL;
};
protected:
@@ -524,7 +524,7 @@ PerlEnvSiteLibPath(struct IPerlEnv* piPerl, const char *pl, STRLEN *const len)
char*
PerlEnvVendorLibPath(struct IPerlEnv* piPerl, const char *pl,
- STRLEN *const len)
+ STRLEN *const len)
{
return win32_get_vendorlib(pl, len);
}
@@ -833,17 +833,17 @@ PerlStdIOFdupopen(struct IPerlStdIO* piPerl, FILE* pf)
/* open the file in the same mode */
if (PERLIO_FILE_flag(pf) & PERLIO_FILE_flag_RD) {
- mode[0] = 'r';
- mode[1] = 0;
+ mode[0] = 'r';
+ mode[1] = 0;
}
else if (PERLIO_FILE_flag(pf) & PERLIO_FILE_flag_WR) {
- mode[0] = 'a';
- mode[1] = 0;
+ mode[0] = 'a';
+ mode[1] = 0;
}
else if (PERLIO_FILE_flag(pf) & PERLIO_FILE_flag_RW) {
- mode[0] = 'r';
- mode[1] = '+';
- mode[2] = 0;
+ mode[0] = 'r';
+ mode[1] = '+';
+ mode[2] = 0;
}
/* it appears that the binmode is attached to the
@@ -854,7 +854,7 @@ PerlStdIOFdupopen(struct IPerlStdIO* piPerl, FILE* pf)
/* move the file pointer to the same position */
if (!fgetpos(pf, &pos)) {
- fsetpos(pfdup, &pos);
+ fsetpos(pfdup, &pos);
}
return pfdup;
}
@@ -986,6 +986,18 @@ PerlLIOLink(struct IPerlLIO* piPerl, const char*oldname, const char *newname)
return win32_link(oldname, newname);
}
+int
+PerlLIOSymLink(struct IPerlLIO* piPerl, const char*oldname, const char *newname)
+{
+ return win32_symlink(oldname, newname);
+}
+
+int
+PerlLIOReadLink(struct IPerlLIO* piPerl, const char *path, char *buf, size_t bufsiz)
+{
+ return win32_readlink(path, buf, bufsiz);
+}
+
Off_t
PerlLIOLseek(struct IPerlLIO* piPerl, int handle, Off_t offset, int origin)
{
@@ -995,7 +1007,7 @@ PerlLIOLseek(struct IPerlLIO* piPerl, int handle, Off_t offset, int origin)
int
PerlLIOLstat(struct IPerlLIO* piPerl, const char *path, Stat_t *buffer)
{
- return win32_stat(path, buffer);
+ return win32_lstat(path, buffer);
}
char*
@@ -1098,6 +1110,8 @@ const struct IPerlLIO perlLIO =
PerlLIOUnlink,
PerlLIOUtime,
PerlLIOWrite,
+ PerlLIOSymLink,
+ PerlLIOReadLink
};
@@ -1710,24 +1724,24 @@ win32_start_child(LPVOID arg)
/* push a zero on the stack (we are the child) */
{
- dSP;
- dTARGET;
- PUSHi(0);
- PUTBACK;
+ dSP;
+ dTARGET;
+ PUSHi(0);
+ PUTBACK;
}
/* continue from next op */
PL_op = PL_op->op_next;
{
- dJMPENV;
- volatile int oldscope = 1; /* We are responsible for all scopes */
+ dJMPENV;
+ volatile int oldscope = 1; /* We are responsible for all scopes */
restart:
- JMPENV_PUSH(status);
- switch (status) {
- case 0:
- CALLRUNOPS(aTHX);
+ JMPENV_PUSH(status);
+ switch (status) {
+ case 0:
+ CALLRUNOPS(aTHX);
/* We may have additional unclosed scopes if fork() was called
* from within a BEGIN block. See perlfork.pod for more details.
* We cannot clean up these other scopes because they belong to a
@@ -1738,48 +1752,48 @@ restart:
PL_scopestack[oldscope-1] = PL_scopestack[PL_scopestack_ix-1];
PL_scopestack_ix = oldscope;
}
- status = 0;
- break;
- case 2:
- while (PL_scopestack_ix > oldscope)
- LEAVE;
- FREETMPS;
- PL_curstash = PL_defstash;
- if (PL_curstash != PL_defstash) {
- SvREFCNT_dec(PL_curstash);
- PL_curstash = (HV *)SvREFCNT_inc(PL_defstash);
- }
- if (PL_endav && !PL_minus_c) {
- PERL_SET_PHASE(PERL_PHASE_END);
- call_list(oldscope, PL_endav);
- }
- status = STATUS_EXIT;
- break;
- case 3:
- if (PL_restartop) {
- POPSTACK_TO(PL_mainstack);
- PL_op = PL_restartop;
- PL_restartop = (OP*)NULL;
- goto restart;
- }
- PerlIO_printf(Perl_error_log, "panic: restartop\n");
- FREETMPS;
- status = 1;
- break;
- }
- JMPENV_POP;
-
- /* XXX hack to avoid perl_destruct() freeing optree */
+ status = 0;
+ break;
+ case 2:
+ while (PL_scopestack_ix > oldscope)
+ LEAVE;
+ FREETMPS;
+ PL_curstash = PL_defstash;
+ if (PL_curstash != PL_defstash) {
+ SvREFCNT_dec(PL_curstash);
+ PL_curstash = (HV *)SvREFCNT_inc(PL_defstash);
+ }
+ if (PL_endav && !PL_minus_c) {
+ PERL_SET_PHASE(PERL_PHASE_END);
+ call_list(oldscope, PL_endav);
+ }
+ status = STATUS_EXIT;
+ break;
+ case 3:
+ if (PL_restartop) {
+ POPSTACK_TO(PL_mainstack);
+ PL_op = PL_restartop;
+ PL_restartop = (OP*)NULL;
+ goto restart;
+ }
+ PerlIO_printf(Perl_error_log, "panic: restartop\n");
+ FREETMPS;
+ status = 1;
+ break;
+ }
+ JMPENV_POP;
+
+ /* XXX hack to avoid perl_destruct() freeing optree */
win32_checkTLS(my_perl);
- PL_main_root = (OP*)NULL;
+ PL_main_root = (OP*)NULL;
}
win32_checkTLS(my_perl);
/* close the std handles to avoid fd leaks */
{
- do_close(PL_stdingv, FALSE);
- do_close(gv_fetchpv("STDOUT", TRUE, SVt_PVIO), FALSE); /* PL_stdoutgv - ISAGN */
- do_close(PL_stderrgv, FALSE);
+ do_close(PL_stdingv, FALSE);
+ do_close(gv_fetchpv("STDOUT", TRUE, SVt_PVIO), FALSE); /* PL_stdoutgv - ISAGN */
+ do_close(PL_stderrgv, FALSE);
}
/* destroy everything (waits for any pseudo-forked children) */
@@ -1806,22 +1820,22 @@ PerlProcFork(struct IPerlProc* piPerl)
CPerlHost *h;
if (w32_num_pseudo_children >= MAXIMUM_WAIT_OBJECTS) {
- errno = EAGAIN;
- return -1;
+ errno = EAGAIN;
+ return -1;
}
h = new CPerlHost(*(CPerlHost*)w32_internal_host);
PerlInterpreter *new_perl = perl_clone_using((PerlInterpreter*)aTHX,
- CLONEf_COPY_STACKS,
- h->m_pHostperlMem,
- h->m_pHostperlMemShared,
- h->m_pHostperlMemParse,
- h->m_pHostperlEnv,
- h->m_pHostperlStdIO,
- h->m_pHostperlLIO,
- h->m_pHostperlDir,
- h->m_pHostperlSock,
- h->m_pHostperlProc
- );
+ CLONEf_COPY_STACKS,
+ h->m_pHostperlMem,
+ h->m_pHostperlMemShared,
+ h->m_pHostperlMemParse,
+ h->m_pHostperlEnv,
+ h->m_pHostperlStdIO,
+ h->m_pHostperlLIO,
+ h->m_pHostperlDir,
+ h->m_pHostperlSock,
+ h->m_pHostperlProc
+ );
new_perl->Isys_intern.internal_host = h;
h->host_perl = new_perl;
# ifdef PERL_SYNC_FORK
@@ -1835,15 +1849,15 @@ PerlProcFork(struct IPerlProc* piPerl)
(w32_message_hwnd == NULL) ? (HWND)NULL : (HWND)INVALID_HANDLE_VALUE;
# ifdef USE_RTL_THREAD_API
handle = (HANDLE)_beginthreadex((void*)NULL, 0, win32_start_child,
- (void*)new_perl, 0, (unsigned*)&id);
+ (void*)new_perl, 0, (unsigned*)&id);
# else
handle = CreateThread(NULL, 0, win32_start_child,
- (LPVOID)new_perl, 0, &id);
+ (LPVOID)new_perl, 0, &id);
# endif
PERL_SET_THX(aTHX); /* XXX perl_clone*() set TLS */
if (!handle) {
- errno = EAGAIN;
- return -1;
+ errno = EAGAIN;
+ return -1;
}
w32_pseudo_child_handles[w32_num_pseudo_children] = handle;
w32_pseudo_child_pids[w32_num_pseudo_children] = id;
@@ -1971,20 +1985,20 @@ CPerlHost::CPerlHost(void)
#define SETUPEXCHANGE(xptr, iptr, table) \
STMT_START { \
- if (xptr) { \
- iptr = *xptr; \
- *xptr = &table; \
- } \
- else { \
- iptr = &table; \
- } \
+ if (xptr) { \
+ iptr = *xptr; \
+ *xptr = &table; \
+ } \
+ else { \
+ iptr = &table; \
+ } \
} STMT_END
CPerlHost::CPerlHost(struct IPerlMem** ppMem, struct IPerlMem** ppMemShared,
- struct IPerlMem** ppMemParse, struct IPerlEnv** ppEnv,
- struct IPerlStdIO** ppStdIO, struct IPerlLIO** ppLIO,
- struct IPerlDir** ppDir, struct IPerlSock** ppSock,
- struct IPerlProc** ppProc)
+ struct IPerlMem** ppMemParse, struct IPerlEnv** ppEnv,
+ struct IPerlStdIO** ppStdIO, struct IPerlLIO** ppLIO,
+ struct IPerlDir** ppDir, struct IPerlSock** ppSock,
+ struct IPerlProc** ppProc)
{
InterlockedIncrement(&num_hosts);
m_pvDir = new VDir(0);
@@ -2059,7 +2073,7 @@ CPerlHost::CPerlHost(CPerlHost& host)
LPSTR lpPtr;
DWORD dwIndex = 0;
while(lpPtr = host.GetIndex(dwIndex))
- Add(lpPtr);
+ Add(lpPtr);
}
CPerlHost::~CPerlHost(void)
@@ -2078,13 +2092,13 @@ CPerlHost::Find(LPCSTR lpStr)
LPSTR lpPtr;
LPSTR* lppPtr = Lookup(lpStr);
if(lppPtr != NULL) {
- for(lpPtr = *lppPtr; *lpPtr != '\0' && *lpPtr != '='; ++lpPtr)
- ;
+ for(lpPtr = *lppPtr; *lpPtr != '\0' && *lpPtr != '='; ++lpPtr)
+ ;
- if(*lpPtr == '=')
- ++lpPtr;
+ if(*lpPtr == '=')
+ ++lpPtr;
- return lpPtr;
+ return lpPtr;
}
return NULL;
}
@@ -2098,26 +2112,26 @@ lookup(const void *arg1, const void *arg2)
ptr1 = *(char**)arg1;
ptr2 = *(char**)arg2;
for(;;) {
- c1 = *ptr1++;
- c2 = *ptr2++;
- if(c1 == '\0' || c1 == '=') {
- if(c2 == '\0' || c2 == '=')
- break;
-
- return -1; // string 1 < string 2
- }
- else if(c2 == '\0' || c2 == '=')
- return 1; // string 1 > string 2
- else if(c1 != c2) {
- c1 = toupper(c1);
- c2 = toupper(c2);
- if(c1 != c2) {
- if(c1 < c2)
- return -1; // string 1 < string 2
-
- return 1; // string 1 > string 2
- }
- }
+ c1 = *ptr1++;
+ c2 = *ptr2++;
+ if(c1 == '\0' || c1 == '=') {
+ if(c2 == '\0' || c2 == '=')
+ break;
+
+ return -1; // string 1 < string 2
+ }
+ else if(c2 == '\0' || c2 == '=')
+ return 1; // string 1 > string 2
+ else if(c1 != c2) {
+ c1 = toupper(c1);
+ c2 = toupper(c2);
+ if(c1 != c2) {
+ if(c1 < c2)
+ return -1; // string 1 < string 2
+
+ return 1; // string 1 > string 2
+ }
+ }
}
return 0;
}
@@ -2126,7 +2140,7 @@ LPSTR*
CPerlHost::Lookup(LPCSTR lpStr)
{
if (!lpStr)
- return NULL;
+ return NULL;
return (LPSTR*)bsearch(&lpStr, m_lppEnvList, m_dwEnvCount, sizeof(LPSTR), lookup);
}
@@ -2139,26 +2153,26 @@ compare(const void *arg1, const void *arg2)
ptr1 = *(char**)arg1;
ptr2 = *(char**)arg2;
for(;;) {
- c1 = *ptr1++;
- c2 = *ptr2++;
- if(c1 == '\0' || c1 == '=') {
- if(c1 == c2)
- break;
-
- return -1; // string 1 < string 2
- }
- else if(c2 == '\0' || c2 == '=')
- return 1; // string 1 > string 2
- else if(c1 != c2) {
- c1 = toupper(c1);
- c2 = toupper(c2);
- if(c1 != c2) {
- if(c1 < c2)
- return -1; // string 1 < string 2
-
- return 1; // string 1 > string 2
- }
- }
+ c1 = *ptr1++;
+ c2 = *ptr2++;
+ if(c1 == '\0' || c1 == '=') {
+ if(c1 == c2)
+ break;
+
+ return -1; // string 1 < string 2
+ }
+ else if(c2 == '\0' || c2 == '=')
+ return 1; // string 1 > string 2
+ else if(c1 != c2) {
+ c1 = toupper(c1);
+ c2 = toupper(c2);
+ if(c1 != c2) {
+ if(c1 < c2)
+ return -1; // string 1 < string 2
+
+ return 1; // string 1 > string 2
+ }
+ }
}
return 0;
}
@@ -2172,23 +2186,23 @@ CPerlHost::Add(LPCSTR lpStr)
// replacing ?
lpPtr = Lookup(lpStr);
if (lpPtr != NULL) {
- // must allocate things via host memory allocation functions
- // rather than perl's Renew() et al, as the perl interpreter
- // may either not be initialized enough when we allocate these,
- // or may already be dead when we go to free these
- *lpPtr = (char*)Realloc(*lpPtr, length * sizeof(char));
- strcpy(*lpPtr, lpStr);
+ // must allocate things via host memory allocation functions
+ // rather than perl's Renew() et al, as the perl interpreter
+ // may either not be initialized enough when we allocate these,
+ // or may already be dead when we go to free these
+ *lpPtr = (char*)Realloc(*lpPtr, length * sizeof(char));
+ strcpy(*lpPtr, lpStr);
}
else {
- m_lppEnvList = (LPSTR*)Realloc(m_lppEnvList, (m_dwEnvCount+1) * sizeof(LPSTR));
- if (m_lppEnvList) {
- m_lppEnvList[m_dwEnvCount] = (char*)Malloc(length * sizeof(char));
- if (m_lppEnvList[m_dwEnvCount] != NULL) {
- strcpy(m_lppEnvList[m_dwEnvCount], lpStr);
- ++m_dwEnvCount;
- qsort(m_lppEnvList, m_dwEnvCount, sizeof(LPSTR), compare);
- }
- }
+ m_lppEnvList = (LPSTR*)Realloc(m_lppEnvList, (m_dwEnvCount+1) * sizeof(LPSTR));
+ if (m_lppEnvList) {
+ m_lppEnvList[m_dwEnvCount] = (char*)Malloc(length * sizeof(char));
+ if (m_lppEnvList[m_dwEnvCount] != NULL) {
+ strcpy(m_lppEnvList[m_dwEnvCount], lpStr);
+ ++m_dwEnvCount;
+ qsort(m_lppEnvList, m_dwEnvCount, sizeof(LPSTR), compare);
+ }
+ }
}
}
@@ -2198,7 +2212,7 @@ CPerlHost::CalculateEnvironmentSpace(void)
DWORD index;
DWORD dwSize = 0;
for(index = 0; index < m_dwEnvCount; ++index)
- dwSize += strlen(m_lppEnvList[index]) + 1;
+ dwSize += strlen(m_lppEnvList[index]) + 1;
return dwSize;
}
@@ -2243,13 +2257,13 @@ CPerlHost::CreateLocalEnvironmentStrings(VDir &vDir)
// step over current directory stuff
while(*lpTmp == '=')
- lpTmp += strlen(lpTmp) + 1;
+ lpTmp += strlen(lpTmp) + 1;
// save the start of the environment strings
lpEnvPtr = lpTmp;
for(dwSize = 1; *lpTmp != '\0'; lpTmp += strlen(lpTmp) + 1) {
- // calculate the size of the environment strings
- dwSize += strlen(lpTmp) + 1;
+ // calculate the size of the environment strings
+ dwSize += strlen(lpTmp) + 1;
}
// add the size of current directories
@@ -2261,57 +2275,57 @@ CPerlHost::CreateLocalEnvironmentStrings(VDir &vDir)
Newx(lpStr, dwSize, char);
lpPtr = lpStr;
if(lpStr != NULL) {
- // build the local environment
- lpStr = vDir.BuildEnvironmentSpace(lpStr);
-
- dwEnvIndex = 0;
- lpLocalEnv = GetIndex(dwEnvIndex);
- while(*lpEnvPtr != '\0') {
- if(!lpLocalEnv) {
- // all environment overrides have been added
- // so copy string into place
- strcpy(lpStr, lpEnvPtr);
- nLength = strlen(lpEnvPtr) + 1;
- lpStr += nLength;
- lpEnvPtr += nLength;
- }
- else {
- // determine which string to copy next
- compVal = compare(&lpEnvPtr, &lpLocalEnv);
- if(compVal < 0) {
- strcpy(lpStr, lpEnvPtr);
- nLength = strlen(lpEnvPtr) + 1;
- lpStr += nLength;
- lpEnvPtr += nLength;
- }
- else {
- char *ptr = strchr(lpLocalEnv, '=');
- if(ptr && ptr[1]) {
- strcpy(lpStr, lpLocalEnv);
- lpStr += strlen(lpLocalEnv) + 1;
- }
- lpLocalEnv = GetIndex(dwEnvIndex);
- if(compVal == 0) {
- // this string was replaced
- lpEnvPtr += strlen(lpEnvPtr) + 1;
- }
- }
- }
- }
-
- while(lpLocalEnv) {
- // still have environment overrides to add
- // so copy the strings into place if not an override
- char *ptr = strchr(lpLocalEnv, '=');
- if(ptr && ptr[1]) {
- strcpy(lpStr, lpLocalEnv);
- lpStr += strlen(lpLocalEnv) + 1;
- }
- lpLocalEnv = GetIndex(dwEnvIndex);
- }
-
- // add final NULL
- *lpStr = '\0';
+ // build the local environment
+ lpStr = vDir.BuildEnvironmentSpace(lpStr);
+
+ dwEnvIndex = 0;
+ lpLocalEnv = GetIndex(dwEnvIndex);
+ while(*lpEnvPtr != '\0') {
+ if(!lpLocalEnv) {
+ // all environment overrides have been added
+ // so copy string into place
+ strcpy(lpStr, lpEnvPtr);
+ nLength = strlen(lpEnvPtr) + 1;
+ lpStr += nLength;
+ lpEnvPtr += nLength;
+ }
+ else {
+ // determine which string to copy next
+ compVal = compare(&lpEnvPtr, &lpLocalEnv);
+ if(compVal < 0) {
+ strcpy(lpStr, lpEnvPtr);
+ nLength = strlen(lpEnvPtr) + 1;
+ lpStr += nLength;
+ lpEnvPtr += nLength;
+ }
+ else {
+ char *ptr = strchr(lpLocalEnv, '=');
+ if(ptr && ptr[1]) {
+ strcpy(lpStr, lpLocalEnv);
+ lpStr += strlen(lpLocalEnv) + 1;
+ }
+ lpLocalEnv = GetIndex(dwEnvIndex);
+ if(compVal == 0) {
+ // this string was replaced
+ lpEnvPtr += strlen(lpEnvPtr) + 1;
+ }
+ }
+ }
+ }
+
+ while(lpLocalEnv) {
+ // still have environment overrides to add
+ // so copy the strings into place if not an override
+ char *ptr = strchr(lpLocalEnv, '=');
+ if(ptr && ptr[1]) {
+ strcpy(lpStr, lpLocalEnv);
+ lpStr += strlen(lpLocalEnv) + 1;
+ }
+ lpLocalEnv = GetIndex(dwEnvIndex);
+ }
+
+ // add final NULL
+ *lpStr = '\0';
}
// release the process environment strings
@@ -2324,10 +2338,10 @@ void
CPerlHost::Reset(void)
{
if(m_lppEnvList != NULL) {
- for(DWORD index = 0; index < m_dwEnvCount; ++index) {
- Free(m_lppEnvList[index]);
- m_lppEnvList[index] = NULL;
- }
+ for(DWORD index = 0; index < m_dwEnvCount; ++index) {
+ Free(m_lppEnvList[index]);
+ m_lppEnvList[index] = NULL;
+ }
}
m_dwEnvCount = 0;
Free(m_lppEnvList);
@@ -2340,13 +2354,13 @@ CPerlHost::Clearenv(void)
char ch;
LPSTR lpPtr, lpStr, lpEnvPtr;
if (m_lppEnvList != NULL) {
- /* set every entry to an empty string */
- for(DWORD index = 0; index < m_dwEnvCount; ++index) {
- char* ptr = strchr(m_lppEnvList[index], '=');
- if(ptr) {
- *++ptr = 0;
- }
- }
+ /* set every entry to an empty string */
+ for(DWORD index = 0; index < m_dwEnvCount; ++index) {
+ char* ptr = strchr(m_lppEnvList[index], '=');
+ if(ptr) {
+ *++ptr = 0;
+ }
+ }
}
/* get the process environment strings */
@@ -2354,19 +2368,19 @@ CPerlHost::Clearenv(void)
/* step over current directory stuff */
while(*lpStr == '=')
- lpStr += strlen(lpStr) + 1;
+ lpStr += strlen(lpStr) + 1;
while(*lpStr) {
- lpPtr = strchr(lpStr, '=');
- if(lpPtr) {
- ch = *++lpPtr;
- *lpPtr = 0;
- Add(lpStr);
- if (m_bTopLevel)
- (void)win32_putenv(lpStr);
- *lpPtr = ch;
- }
- lpStr += strlen(lpStr) + 1;
+ lpPtr = strchr(lpStr, '=');
+ if(lpPtr) {
+ ch = *++lpPtr;
+ *lpPtr = 0;
+ Add(lpStr);
+ if (m_bTopLevel)
+ (void)win32_putenv(lpStr);
+ *lpPtr = ch;
+ }
+ lpStr += strlen(lpStr) + 1;
}
win32_freeenvironmentstrings(lpEnvPtr);
@@ -2377,9 +2391,9 @@ char*
CPerlHost::Getenv(const char *varname)
{
if (!m_bTopLevel) {
- char *pEnv = Find(varname);
- if (pEnv && *pEnv)
- return pEnv;
+ char *pEnv = Find(varname);
+ if (pEnv && *pEnv)
+ return pEnv;
}
return win32_getenv(varname);
}
@@ -2389,7 +2403,7 @@ CPerlHost::Putenv(const char *envstring)
{
Add(envstring);
if (m_bTopLevel)
- return win32_putenv(envstring);
+ return win32_putenv(envstring);
return 0;
}
@@ -2399,12 +2413,12 @@ CPerlHost::Chdir(const char *dirname)
{
int ret;
if (!dirname) {
- errno = ENOENT;
- return -1;
+ errno = ENOENT;
+ return -1;
}
ret = m_pvDir->SetCurrentDirectoryA((char*)dirname);
if(ret < 0) {
- errno = ENOENT;
+ errno = ENOENT;
}
return ret;
}
diff --git a/Master/tlpkg/tlperl/lib/CORE/perlio.h b/Master/tlpkg/tlperl/lib/CORE/perlio.h
index ee16ab8774e..f444fa86d01 100644
--- a/Master/tlpkg/tlperl/lib/CORE/perlio.h
+++ b/Master/tlpkg/tlperl/lib/CORE/perlio.h
@@ -63,22 +63,15 @@ typedef PerlIOl *PerlIO;
#define PerlIO PerlIO
#define PERLIO_LAYERS 1
-/* PERLIO_FUNCS_CONST is now on by default for efficiency, PERLIO_FUNCS_CONST
- can be removed 1 day once stable & then PerlIO vtables are permanently RO */
-#ifdef PERLIO_FUNCS_CONST
#define PERLIO_FUNCS_DECL(funcs) const PerlIO_funcs funcs
#define PERLIO_FUNCS_CAST(funcs) (PerlIO_funcs*)(funcs)
-#else
-#define PERLIO_FUNCS_DECL(funcs) PerlIO_funcs funcs
-#define PERLIO_FUNCS_CAST(funcs) (funcs)
-#endif
PERL_CALLCONV void PerlIO_define_layer(pTHX_ PerlIO_funcs *tab);
PERL_CALLCONV PerlIO_funcs *PerlIO_find_layer(pTHX_ const char *name,
STRLEN len,
- int load);
+ int load);
PERL_CALLCONV PerlIO *PerlIO_push(pTHX_ PerlIO *f, PERLIO_FUNCS_DECL(*tab),
- const char *mode, SV *arg);
+ const char *mode, SV *arg);
PERL_CALLCONV void PerlIO_pop(pTHX_ PerlIO *f);
PERL_CALLCONV AV* PerlIO_get_layers(pTHX_ PerlIO *f);
PERL_CALLCONV void PerlIO_clone(pTHX_ PerlInterpreter *proto,
@@ -189,8 +182,8 @@ PERL_CALLCONV PerlIO *PerlIO_open(const char *, const char *);
#endif
#ifndef PerlIO_openn
PERL_CALLCONV PerlIO *PerlIO_openn(pTHX_ const char *layers, const char *mode,
- int fd, int imode, int perm, PerlIO *old,
- int narg, SV **arg);
+ int fd, int imode, int perm, PerlIO *old,
+ int narg, SV **arg);
#endif
#ifndef PerlIO_eof
PERL_CALLCONV int PerlIO_eof(PerlIO *);
@@ -315,11 +308,11 @@ PERL_CALLCONV int PerlIO_isutf8(PerlIO *);
#endif
#ifndef PerlIO_apply_layers
PERL_CALLCONV int PerlIO_apply_layers(pTHX_ PerlIO *f, const char *mode,
- const char *names);
+ const char *names);
#endif
#ifndef PerlIO_binmode
PERL_CALLCONV int PerlIO_binmode(pTHX_ PerlIO *f, int iotype, int omode,
- const char *names);
+ const char *names);
#endif
#ifndef PerlIO_getname
PERL_CALLCONV char *PerlIO_getname(PerlIO *, char *);
diff --git a/Master/tlpkg/tlperl/lib/CORE/perliol.h b/Master/tlpkg/tlperl/lib/CORE/perliol.h
index 40b4224e508..691e09533f7 100644
--- a/Master/tlpkg/tlperl/lib/CORE/perliol.h
+++ b/Master/tlpkg/tlperl/lib/CORE/perliol.h
@@ -21,10 +21,10 @@ struct _PerlIO_funcs {
IV (*Pushed) (pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab);
IV (*Popped) (pTHX_ PerlIO *f);
PerlIO *(*Open) (pTHX_ PerlIO_funcs *tab,
- PerlIO_list_t *layers, IV n,
- const char *mode,
- int fd, int imode, int perm,
- PerlIO *old, int narg, SV **args);
+ PerlIO_list_t *layers, IV n,
+ const char *mode,
+ int fd, int imode, int perm,
+ PerlIO *old, int narg, SV **args);
IV (*Binmode)(pTHX_ PerlIO *f);
SV *(*Getarg) (pTHX_ PerlIO *f, CLONE_PARAMS *param, int flags);
IV (*Fileno) (pTHX_ PerlIO *f);
@@ -106,23 +106,16 @@ struct _PerlIO {
#define PerlIOValid(f) ((f) && *(f))
/*--------------------------------------------------------------------------------------*/
-/* Data exports - EXTCONST rather than extern is needed for Cygwin */
-#undef EXTPERLIO
-#ifdef PERLIO_FUNCS_CONST
-#define EXTPERLIO EXTCONST
-#else
-#define EXTPERLIO EXT
-#endif
-EXTPERLIO PerlIO_funcs PerlIO_unix;
-EXTPERLIO PerlIO_funcs PerlIO_perlio;
-EXTPERLIO PerlIO_funcs PerlIO_stdio;
-EXTPERLIO PerlIO_funcs PerlIO_crlf;
-EXTPERLIO PerlIO_funcs PerlIO_utf8;
-EXTPERLIO PerlIO_funcs PerlIO_byte;
-EXTPERLIO PerlIO_funcs PerlIO_raw;
-EXTPERLIO PerlIO_funcs PerlIO_pending;
+EXTCONST PerlIO_funcs PerlIO_unix;
+EXTCONST PerlIO_funcs PerlIO_perlio;
+EXTCONST PerlIO_funcs PerlIO_stdio;
+EXTCONST PerlIO_funcs PerlIO_crlf;
+EXTCONST PerlIO_funcs PerlIO_utf8;
+EXTCONST PerlIO_funcs PerlIO_byte;
+EXTCONST PerlIO_funcs PerlIO_raw;
+EXTCONST PerlIO_funcs PerlIO_pending;
#ifdef WIN32
-EXTPERLIO PerlIO_funcs PerlIO_win32;
+EXTCONST PerlIO_funcs PerlIO_win32;
#endif
PERL_CALLCONV PerlIO *PerlIO_allocate(pTHX);
PERL_CALLCONV SV *PerlIO_arg_fetch(PerlIO_list_t *av, IV n);
@@ -151,7 +144,7 @@ typedef struct {
} PerlIOBuf;
PERL_CALLCONV int PerlIO_apply_layera(pTHX_ PerlIO *f, const char *mode,
- PerlIO_list_t *layers, IV n, IV max);
+ PerlIO_list_t *layers, IV n, IV max);
PERL_CALLCONV int PerlIO_parse_layers(pTHX_ PerlIO_list_t *av, const char *names);
PERL_CALLCONV PerlIO_funcs *PerlIO_layer_fetch(pTHX_ PerlIO_list_t *av, IV n, PerlIO_funcs *def);
diff --git a/Master/tlpkg/tlperl/lib/CORE/perlvars.h b/Master/tlpkg/tlperl/lib/CORE/perlvars.h
index cd1523d5df5..c4a08e038bd 100644
--- a/Master/tlpkg/tlperl/lib/CORE/perlvars.h
+++ b/Master/tlpkg/tlperl/lib/CORE/perlvars.h
@@ -38,9 +38,9 @@ use the variable.
PERLVAR(G, op_mutex, perl_mutex) /* Mutex for op refcounting */
#endif
PERLVARI(G, curinterp, PerlInterpreter *, NULL)
- /* currently running interpreter
- * (initial parent interpreter under
- * useithreads) */
+ /* currently running interpreter
+ * (initial parent interpreter under
+ * useithreads) */
#if defined(USE_ITHREADS)
PERLVAR(G, thr_key, perl_key) /* key to retrieve per-thread struct */
#endif
@@ -57,7 +57,7 @@ PERLVARI(G, sig_handlers_initted, int, 0)
#endif
#ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
PERLVARA(G, sig_ignoring, SIG_SIZE, int)
- /* which signals we are ignoring */
+ /* which signals we are ignoring */
#endif
#ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
PERLVARA(G, sig_defaulting, SIG_SIZE, int)
@@ -104,10 +104,8 @@ PERLVARI(G, mmap_page_size, IV, 0)
#if defined(USE_ITHREADS)
PERLVAR(G, hints_mutex, perl_mutex) /* Mutex for refcounted he refcounting */
-PERLVAR(G, env_mutex, perl_mutex) /* Mutex for accessing ENV */
-# if ! defined(USE_THREAD_SAFE_LOCALE) || defined(TS_W32_BROKEN_LOCALECONV)
-PERLVAR(G, locale_mutex, perl_mutex) /* Mutex for setlocale() changing */
-# endif
+PERLVAR(G, env_mutex, perl_RnW1_mutex_t) /* Mutex for accessing ENV */
+PERLVAR(G, locale_mutex, perl_mutex) /* Mutex related to locale handling */
# ifndef USE_THREAD_SAFE_LOCALE
PERLVAR(G, lc_numeric_mutex, perl_mutex) /* Mutex for switching LC_NUMERIC */
# endif
@@ -172,19 +170,6 @@ destruction. (Use of C<PL_dirty> is discouraged since 5.14.)
#if defined(USE_ITHREADS)
PERLVAR(G, check_mutex, perl_mutex) /* Mutex for PL_check */
#endif
-#ifdef PERL_GLOBAL_STRUCT
-PERLVAR(G, ppaddr, Perl_ppaddr_t *) /* or opcode.h */
-PERLVAR(G, check, Perl_check_t *) /* or opcode.h */
-PERLVARA(G, fold_locale, 256, unsigned char) /* or perl.h */
-#endif
-
-#ifdef PERL_NEED_APPCTX
-PERLVAR(G, appctx, void*) /* the application context */
-#endif
-
-#if defined(HAS_TIMES) && defined(PERL_NEED_TIMESBASE)
-PERLVAR(G, timesbase, struct tms)
-#endif
/* allocate a unique index to every module that calls MY_CXT_INIT */
@@ -205,9 +190,9 @@ PERLVARI(G, veto_cleanup, int, FALSE) /* exit without cleanup */
Function pointer, pointing at a function used to handle extended keywords.
The function should be declared as
- int keyword_plugin_function(pTHX_
- char *keyword_ptr, STRLEN keyword_len,
- OP **op_ptr)
+ int keyword_plugin_function(pTHX_
+ char *keyword_ptr, STRLEN keyword_len,
+ OP **op_ptr)
The function is called from the tokeniser, whenever a possible keyword
is seen. C<keyword_ptr> points at the word in the parser's input
@@ -279,9 +264,9 @@ PERLVAR(G, malloc_mutex, perl_mutex) /* Mutex for malloc */
#endif
PERLVARI(G, hash_seed_set, bool, FALSE) /* perl.c */
-PERLVARA(G, hash_seed, PERL_HASH_SEED_BYTES, unsigned char) /* perl.c and hv.h */
+PERLVARA(G, hash_seed_w, PERL_HASH_SEED_WORDS, __PERL_HASH_WORD_TYPE) /* perl.c and hv.h */
#if defined(PERL_HASH_STATE_BYTES)
-PERLVARA(G, hash_state, PERL_HASH_STATE_BYTES, unsigned char) /* perl.c and hv.h */
+PERLVARA(G, hash_state_w, PERL_HASH_STATE_WORDS, __PERL_HASH_WORD_TYPE) /* perl.c and hv.h */
#endif
#if defined(PERL_USE_SINGLE_CHAR_HASH_CACHE)
PERLVARA(G, hash_chars, (1+256) * sizeof(U32), unsigned char) /* perl.c and hv.h */
@@ -320,13 +305,3 @@ PERLVARI(G, strategy_socket, int, 0) /* doio.c */
PERLVARI(G, strategy_accept, int, 0) /* doio.c */
PERLVARI(G, strategy_pipe, int, 0) /* doio.c */
PERLVARI(G, strategy_socketpair, int, 0) /* doio.c */
-
-#ifdef PERL_IMPLICIT_CONTEXT
-# ifdef PERL_GLOBAL_STRUCT_PRIVATE
-/* per-module array of pointers to MY_CXT_KEY constants.
- * It simulates each module having a static my_cxt_index var on builds
- * which don't allow static vars */
-PERLVARI(G, my_cxt_keys, const char **, NULL)
-PERLVARI(G, my_cxt_keys_size, int, 0) /* size of PL_my_cxt_keys */
-# endif
-#endif
diff --git a/Master/tlpkg/tlperl/lib/CORE/perly.h b/Master/tlpkg/tlperl/lib/CORE/perly.h
index 45cb6ba1216..545cf3f6b03 100644
--- a/Master/tlpkg/tlperl/lib/CORE/perly.h
+++ b/Master/tlpkg/tlperl/lib/CORE/perly.h
@@ -7,7 +7,7 @@
#define PERL_BISON_VERSION 30003
#ifdef PERL_CORE
-/* A Bison parser, made by GNU Bison 3.3.2. */
+/* A Bison parser, made by GNU Bison 3.3. */
/* Bison interface for Yacc-like parsers in C
@@ -63,86 +63,109 @@ extern int yydebug;
GRAMFULLSTMT = 262,
GRAMSTMTSEQ = 263,
GRAMSUBSIGNATURE = 264,
- BAREWORD = 265,
- METHOD = 266,
- FUNCMETH = 267,
- THING = 268,
- PMFUNC = 269,
- PRIVATEREF = 270,
- QWLIST = 271,
- FUNC0OP = 272,
- FUNC0SUB = 273,
- UNIOPSUB = 274,
- LSTOPSUB = 275,
- PLUGEXPR = 276,
- PLUGSTMT = 277,
- LABEL = 278,
- FORMAT = 279,
- SUB = 280,
- SIGSUB = 281,
- ANONSUB = 282,
- ANON_SIGSUB = 283,
- PACKAGE = 284,
- USE = 285,
- WHILE = 286,
- UNTIL = 287,
- IF = 288,
- UNLESS = 289,
- ELSE = 290,
- ELSIF = 291,
- CONTINUE = 292,
- FOR = 293,
- GIVEN = 294,
- WHEN = 295,
- DEFAULT = 296,
- LOOPEX = 297,
- DOTDOT = 298,
- YADAYADA = 299,
- FUNC0 = 300,
- FUNC1 = 301,
- FUNC = 302,
- UNIOP = 303,
- LSTOP = 304,
- MULOP = 305,
- ADDOP = 306,
- DOLSHARP = 307,
- DO = 308,
- HASHBRACK = 309,
- NOAMP = 310,
- LOCAL = 311,
- MY = 312,
- REQUIRE = 313,
- COLONATTR = 314,
- FORMLBRACK = 315,
- FORMRBRACK = 316,
- SUBLEXSTART = 317,
- SUBLEXEND = 318,
- PREC_LOW = 319,
- OROP = 320,
- DOROP = 321,
- ANDOP = 322,
- NOTOP = 323,
- ASSIGNOP = 324,
- OROR = 325,
- DORDOR = 326,
- ANDAND = 327,
- BITOROP = 328,
- BITANDOP = 329,
- CHEQOP = 330,
- NCEQOP = 331,
- CHRELOP = 332,
- NCRELOP = 333,
- SHIFTOP = 334,
- MATCHOP = 335,
- UMINUS = 336,
- REFGEN = 337,
- POWOP = 338,
- PREINC = 339,
- PREDEC = 340,
- POSTINC = 341,
- POSTDEC = 342,
- POSTJOIN = 343,
- ARROW = 344
+ PERLY_AMPERSAND = 265,
+ PERLY_BRACE_OPEN = 266,
+ PERLY_BRACE_CLOSE = 267,
+ PERLY_BRACKET_OPEN = 268,
+ PERLY_BRACKET_CLOSE = 269,
+ PERLY_COMMA = 270,
+ PERLY_DOLLAR = 271,
+ PERLY_DOT = 272,
+ PERLY_EQUAL_SIGN = 273,
+ PERLY_MINUS = 274,
+ PERLY_PERCENT_SIGN = 275,
+ PERLY_PLUS = 276,
+ PERLY_SEMICOLON = 277,
+ PERLY_SLASH = 278,
+ PERLY_SNAIL = 279,
+ PERLY_STAR = 280,
+ BAREWORD = 281,
+ METHOD = 282,
+ FUNCMETH = 283,
+ THING = 284,
+ PMFUNC = 285,
+ PRIVATEREF = 286,
+ QWLIST = 287,
+ FUNC0OP = 288,
+ FUNC0SUB = 289,
+ UNIOPSUB = 290,
+ LSTOPSUB = 291,
+ PLUGEXPR = 292,
+ PLUGSTMT = 293,
+ LABEL = 294,
+ FORMAT = 295,
+ SUB = 296,
+ SIGSUB = 297,
+ ANONSUB = 298,
+ ANON_SIGSUB = 299,
+ PACKAGE = 300,
+ USE = 301,
+ WHILE = 302,
+ UNTIL = 303,
+ IF = 304,
+ UNLESS = 305,
+ ELSE = 306,
+ ELSIF = 307,
+ CONTINUE = 308,
+ FOR = 309,
+ GIVEN = 310,
+ WHEN = 311,
+ DEFAULT = 312,
+ TRY = 313,
+ CATCH = 314,
+ LOOPEX = 315,
+ DOTDOT = 316,
+ YADAYADA = 317,
+ FUNC0 = 318,
+ FUNC1 = 319,
+ FUNC = 320,
+ UNIOP = 321,
+ LSTOP = 322,
+ MULOP = 323,
+ ADDOP = 324,
+ DOLSHARP = 325,
+ DO = 326,
+ HASHBRACK = 327,
+ NOAMP = 328,
+ LOCAL = 329,
+ MY = 330,
+ REQUIRE = 331,
+ COLONATTR = 332,
+ FORMLBRACK = 333,
+ FORMRBRACK = 334,
+ SUBLEXSTART = 335,
+ SUBLEXEND = 336,
+ PREC_LOW = 337,
+ OROP = 338,
+ ANDOP = 339,
+ NOTOP = 340,
+ ASSIGNOP = 341,
+ PERLY_QUESTION_MARK = 342,
+ PERLY_COLON = 343,
+ OROR = 344,
+ DORDOR = 345,
+ ANDAND = 346,
+ BITOROP = 347,
+ BITANDOP = 348,
+ CHEQOP = 349,
+ NCEQOP = 350,
+ CHRELOP = 351,
+ NCRELOP = 352,
+ SHIFTOP = 353,
+ MATCHOP = 354,
+ PERLY_EXCLAMATION_MARK = 355,
+ PERLY_TILDE = 356,
+ UMINUS = 357,
+ REFGEN = 358,
+ POWOP = 359,
+ PREINC = 360,
+ PREDEC = 361,
+ POSTINC = 362,
+ POSTDEC = 363,
+ POSTJOIN = 364,
+ ARROW = 365,
+ PERLY_PAREN_CLOSE = 366,
+ PERLY_PAREN_OPEN = 367
};
#endif
@@ -195,6 +218,6 @@ int yyparse (void);
/* Generated from:
- * e5b801fdebce5c77dd8e644fc5a489cbea6af33db180e771dd9d669b12bbe0cf perly.y
- * 0947213b55d0ed11693554bea04987e886cf285f5c14cf9075fa1e7acc3f4061 regen_perly.pl
+ * 427b422b0ce1154d834dc461973a3254729575694f98ab600032f67ccab7b9e5 perly.y
+ * acf1cbfd2545faeaaa58b1cf0cf9d7f98b5be0752eb7a54528ef904a9e2e1ca7 regen_perly.pl
* ex: set ro: */
diff --git a/Master/tlpkg/tlperl/lib/CORE/pp.h b/Master/tlpkg/tlperl/lib/CORE/pp.h
index 1ab9a47f115..cea956db407 100644
--- a/Master/tlpkg/tlperl/lib/CORE/pp.h
+++ b/Master/tlpkg/tlperl/lib/CORE/pp.h
@@ -11,7 +11,7 @@
#define PP(s) OP * Perl_##s(pTHX)
/*
-=head1 Stack Manipulation Macros
+=for apidoc_section $stack
=for apidoc AmnU||SP
Stack pointer. This is usually handled by C<xsubpp>. See C<L</dSP>> and
@@ -53,6 +53,16 @@ Refetch the stack pointer. Used after a callback. See L<perlcall>.
#undef SP /* Solaris 2.7 i386 has this in /usr/include/sys/reg.h */
#define SP sp
#define MARK mark
+
+/*
+=for apidoc Amns||TARG
+
+C<TARG> is short for "target". It is an entry in the pad that an OPs
+C<op_targ> refers to. It is scratchpad space, often used as a return
+value for the OP, but some use it for other purposes.
+
+=cut
+*/
#define TARG targ
#define PUSHMARK(p) \
@@ -60,7 +70,7 @@ Refetch the stack pointer. Used after a callback. See L<perlcall>.
I32 * mark_stack_entry; \
if (UNLIKELY((mark_stack_entry = ++PL_markstack_ptr) \
== PL_markstack_max)) \
- mark_stack_entry = markstack_grow(); \
+ mark_stack_entry = markstack_grow(); \
*mark_stack_entry = (I32)((p) - PL_stack_base); \
DEBUG_s(DEBUG_v(PerlIO_printf(Perl_debug_log, \
"MARK push %p %" IVdf "\n", \
@@ -91,6 +101,13 @@ Refetch the stack pointer. Used after a callback. See L<perlcall>.
#define dTARGETSTACKED SV * GETTARGETSTACKED
#define GETTARGET targ = PAD_SV(PL_op->op_targ)
+
+/*
+=for apidoc Amns||dTARGET
+Declare that this function uses C<TARG>
+
+=cut
+*/
#define dTARGET SV * GETTARGET
#define GETATARGET targ = (PL_op->op_flags & OPf_STACKED ? sp[-1] : PAD_SV(PL_op->op_targ))
@@ -503,7 +520,7 @@ Does not use C<TARG>. See also C<L</XPUSHu>>, C<L</mPUSHu>> and C<L</PUSHu>>.
#define dPOPXiirl(X) IV right = POPi; IV left = CAT2(X,i)
#define USE_LEFT(sv) \
- (SvOK(sv) || !(PL_op->op_flags & OPf_STACKED))
+ (SvOK(sv) || !(PL_op->op_flags & OPf_STACKED))
#define dPOPXiirl_ul_nomg(X) \
IV right = (sp--, SvIV_nomg(TOPp1s)); \
SV *leftsv = CAT2(X,s); \
@@ -537,18 +554,18 @@ Does not use C<TARG>. See also C<L</XPUSHu>>, C<L</mPUSHu>> and C<L</PUSHu>>.
#define SWITCHSTACK(f,t) \
STMT_START { \
- AvFILLp(f) = sp - PL_stack_base; \
- PL_stack_base = AvARRAY(t); \
- PL_stack_max = PL_stack_base + AvMAX(t); \
- sp = PL_stack_sp = PL_stack_base + AvFILLp(t); \
- PL_curstack = t; \
+ AvFILLp(f) = sp - PL_stack_base; \
+ PL_stack_base = AvARRAY(t); \
+ PL_stack_max = PL_stack_base + AvMAX(t); \
+ sp = PL_stack_sp = PL_stack_base + AvFILLp(t); \
+ PL_curstack = t; \
} STMT_END
#define EXTEND_MORTAL(n) \
STMT_START { \
- SSize_t eMiX = PL_tmps_ix + (n); \
- if (UNLIKELY(eMiX >= PL_tmps_max)) \
- (void)Perl_tmps_grow_p(aTHX_ eMiX); \
+ SSize_t eMiX = PL_tmps_ix + (n); \
+ if (UNLIKELY(eMiX >= PL_tmps_max)) \
+ (void)Perl_tmps_grow_p(aTHX_ eMiX); \
} STMT_END
#define AMGf_noright 1
@@ -564,14 +581,14 @@ Does not use C<TARG>. See also C<L</XPUSHu>>, C<L</mPUSHu>> and C<L</PUSHu>>.
/* do SvGETMAGIC on the stack args before checking for overload */
#define tryAMAGICun_MG(method, flags) STMT_START { \
- if ( UNLIKELY((SvFLAGS(TOPs) & (SVf_ROK|SVs_GMG))) \
- && Perl_try_amagic_un(aTHX_ method, flags)) \
- return NORMAL; \
+ if ( UNLIKELY((SvFLAGS(TOPs) & (SVf_ROK|SVs_GMG))) \
+ && Perl_try_amagic_un(aTHX_ method, flags)) \
+ return NORMAL; \
} STMT_END
#define tryAMAGICbin_MG(method, flags) STMT_START { \
- if ( UNLIKELY(((SvFLAGS(TOPm1s)|SvFLAGS(TOPs)) & (SVf_ROK|SVs_GMG))) \
- && Perl_try_amagic_bin(aTHX_ method, flags)) \
- return NORMAL; \
+ if ( UNLIKELY(((SvFLAGS(TOPm1s)|SvFLAGS(TOPs)) & (SVf_ROK|SVs_GMG))) \
+ && Perl_try_amagic_bin(aTHX_ method, flags)) \
+ return NORMAL; \
} STMT_END
#define AMG_CALLunary(sv,meth) \
@@ -582,16 +599,16 @@ Does not use C<TARG>. See also C<L</XPUSHu>>, C<L</mPUSHu>> and C<L</PUSHu>>.
#define tryAMAGICunTARGETlist(meth, jump) \
STMT_START { \
- dSP; \
- SV *tmpsv; \
- SV *arg= *sp; \
+ dSP; \
+ SV *tmpsv; \
+ SV *arg= *sp; \
U8 gimme = GIMME_V; \
- if (UNLIKELY(SvAMAGIC(arg) && \
- (tmpsv = amagic_call(arg, &PL_sv_undef, meth, \
- AMGf_want_list | AMGf_noright \
- |AMGf_unary)))) \
+ if (UNLIKELY(SvAMAGIC(arg) && \
+ (tmpsv = amagic_call(arg, &PL_sv_undef, meth, \
+ AMGf_want_list | AMGf_noright \
+ |AMGf_unary)))) \
{ \
- SPAGAIN; \
+ SPAGAIN; \
if (gimme == G_VOID) { \
NOOP; \
} \
@@ -599,7 +616,7 @@ Does not use C<TARG>. See also C<L</XPUSHu>>, C<L</mPUSHu>> and C<L</PUSHu>>.
SSize_t i; \
SSize_t len; \
assert(SvTYPE(tmpsv) == SVt_PVAV); \
- len = av_tindex((AV *)tmpsv) + 1; \
+ len = av_count((AV *)tmpsv); \
(void)POPs; /* get rid of the arg */ \
EXTEND(sp, len); \
for (i = 0; i < len; ++i) \
@@ -612,25 +629,25 @@ Does not use C<TARG>. See also C<L</XPUSHu>>, C<L</mPUSHu>> and C<L</PUSHu>>.
sp--; \
SETTARG; \
} \
- PUTBACK; \
- if (jump) { \
- OP *jump_o = NORMAL->op_next; \
- while (jump_o->op_type == OP_NULL) \
- jump_o = jump_o->op_next; \
- assert(jump_o->op_type == OP_ENTERSUB); \
- (void)POPMARK; \
- return jump_o->op_next; \
- } \
- return NORMAL; \
- } \
+ PUTBACK; \
+ if (jump) { \
+ OP *jump_o = NORMAL->op_next; \
+ while (jump_o->op_type == OP_NULL) \
+ jump_o = jump_o->op_next; \
+ assert(jump_o->op_type == OP_ENTERSUB); \
+ (void)POPMARK; \
+ return jump_o->op_next; \
+ } \
+ return NORMAL; \
+ } \
} STMT_END
/* This is no longer used anywhere in the core. You might wish to consider
calling amagic_deref_call() directly, as it has a cleaner interface. */
#define tryAMAGICunDEREF(meth) \
STMT_START { \
- sv = amagic_deref_call(*sp, CAT2(meth,_amg)); \
- SPAGAIN; \
+ sv = amagic_deref_call(*sp, CAT2(meth,_amg)); \
+ SPAGAIN; \
} STMT_END
@@ -665,13 +682,13 @@ True if this op will be the return value of an lvalue subroutine
/* Used in various places that need to dereference a glob or globref */
# define MAYBE_DEREF_GV_flags(sv,phlags) \
( \
- (void)(phlags & SV_GMAGIC && (SvGETMAGIC(sv),0)), \
- isGV_with_GP(sv) \
- ? (GV *)(sv) \
- : SvROK(sv) && SvTYPE(SvRV(sv)) <= SVt_PVLV && \
- (SvGETMAGIC(SvRV(sv)), isGV_with_GP(SvRV(sv))) \
- ? (GV *)SvRV(sv) \
- : NULL \
+ (void)(phlags & SV_GMAGIC && (SvGETMAGIC(sv),0)), \
+ isGV_with_GP(sv) \
+ ? (GV *)(sv) \
+ : SvROK(sv) && SvTYPE(SvRV(sv)) <= SVt_PVLV && \
+ (SvGETMAGIC(SvRV(sv)), isGV_with_GP(SvRV(sv))) \
+ ? (GV *)SvRV(sv) \
+ : NULL \
)
# define MAYBE_DEREF_GV(sv) MAYBE_DEREF_GV_flags(sv,SV_GMAGIC)
# define MAYBE_DEREF_GV_nomg(sv) MAYBE_DEREF_GV_flags(sv,0)
diff --git a/Master/tlpkg/tlperl/lib/CORE/pp_proto.h b/Master/tlpkg/tlperl/lib/CORE/pp_proto.h
index 6ddb1f6634d..a9bda73e3ce 100644
--- a/Master/tlpkg/tlperl/lib/CORE/pp_proto.h
+++ b/Master/tlpkg/tlperl/lib/CORE/pp_proto.h
@@ -34,6 +34,7 @@ PERL_CALLCONV OP *Perl_pp_bit_or(pTHX);
PERL_CALLCONV OP *Perl_pp_bless(pTHX);
PERL_CALLCONV OP *Perl_pp_break(pTHX);
PERL_CALLCONV OP *Perl_pp_caller(pTHX);
+PERL_CALLCONV OP *Perl_pp_catch(pTHX);
PERL_CALLCONV OP *Perl_pp_chdir(pTHX);
PERL_CALLCONV OP *Perl_pp_chop(pTHX);
PERL_CALLCONV OP *Perl_pp_chown(pTHX);
@@ -66,6 +67,7 @@ PERL_CALLCONV OP *Perl_pp_enteriter(pTHX);
PERL_CALLCONV OP *Perl_pp_enterloop(pTHX);
PERL_CALLCONV OP *Perl_pp_entersub(pTHX);
PERL_CALLCONV OP *Perl_pp_entertry(pTHX);
+PERL_CALLCONV OP *Perl_pp_entertrycatch(pTHX);
PERL_CALLCONV OP *Perl_pp_enterwhen(pTHX);
PERL_CALLCONV OP *Perl_pp_enterwrite(pTHX);
PERL_CALLCONV OP *Perl_pp_eof(pTHX);
@@ -143,6 +145,7 @@ PERL_CALLCONV OP *Perl_pp_leaveloop(pTHX);
PERL_CALLCONV OP *Perl_pp_leavesub(pTHX);
PERL_CALLCONV OP *Perl_pp_leavesublv(pTHX);
PERL_CALLCONV OP *Perl_pp_leavetry(pTHX);
+PERL_CALLCONV OP *Perl_pp_leavetrycatch(pTHX);
PERL_CALLCONV OP *Perl_pp_leavewhen(pTHX);
PERL_CALLCONV OP *Perl_pp_leavewrite(pTHX);
PERL_CALLCONV OP *Perl_pp_left_shift(pTHX);
@@ -191,6 +194,7 @@ PERL_CALLCONV OP *Perl_pp_padhv(pTHX);
PERL_CALLCONV OP *Perl_pp_padrange(pTHX);
PERL_CALLCONV OP *Perl_pp_padsv(pTHX);
PERL_CALLCONV OP *Perl_pp_pipe_op(pTHX);
+PERL_CALLCONV OP *Perl_pp_poptry(pTHX);
PERL_CALLCONV OP *Perl_pp_pos(pTHX);
PERL_CALLCONV OP *Perl_pp_postdec(pTHX);
PERL_CALLCONV OP *Perl_pp_postinc(pTHX);
diff --git a/Master/tlpkg/tlperl/lib/CORE/proto.h b/Master/tlpkg/tlperl/lib/CORE/proto.h
index 02ef4edb3b8..faca6d1366e 100644
--- a/Master/tlpkg/tlperl/lib/CORE/proto.h
+++ b/Master/tlpkg/tlperl/lib/CORE/proto.h
@@ -117,6 +117,24 @@ PERL_STATIC_INLINE void Perl_SvREFCNT_inc_void(SV *sv);
#define PERL_ARGS_ASSERT_SVREFCNT_INC_VOID
#endif
#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE bool Perl_SvTRUE(pTHX_ SV *sv);
+#define PERL_ARGS_ASSERT_SVTRUE
+#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE bool Perl_SvTRUE_NN(pTHX_ SV *sv);
+#define PERL_ARGS_ASSERT_SVTRUE_NN \
+ assert(sv)
+#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE bool Perl_SvTRUE_common(pTHX_ SV *sv, const bool sv_2bool_is_fallback);
+#define PERL_ARGS_ASSERT_SVTRUE_COMMON \
+ assert(sv)
+#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE bool Perl_SvTRUE_nomg(pTHX_ SV *sv);
+#define PERL_ARGS_ASSERT_SVTRUE_NOMG
+#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
PERL_STATIC_INLINE I32 Perl_TOPMARK(pTHX);
#define PERL_ARGS_ASSERT_TOPMARK
#endif
@@ -219,6 +237,13 @@ PERL_CALLCONV SV** Perl_av_arylen_p(pTHX_ AV *av);
PERL_CALLCONV void Perl_av_clear(pTHX_ AV *av);
#define PERL_ARGS_ASSERT_AV_CLEAR \
assert(av)
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE Size_t Perl_av_count(pTHX_ AV *av)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_AV_COUNT \
+ assert(av)
+#endif
+
PERL_CALLCONV void Perl_av_create_and_push(pTHX_ AV **const avp, SV *const val);
#define PERL_ARGS_ASSERT_AV_CREATE_AND_PUSH \
assert(avp); assert(val)
@@ -284,12 +309,9 @@ PERL_CALLCONV SV** Perl_av_store(pTHX_ AV *av, SSize_t key, SV *val);
__attribute__warn_unused_result__; */
#define PERL_ARGS_ASSERT_AV_TINDEX
-#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE SSize_t Perl_av_top_index(pTHX_ AV *av)
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_AV_TOP_INDEX \
- assert(av)
-#endif
+/* PERL_CALLCONV SSize_t av_top_index(pTHX_ AV *av)
+ __attribute__warn_unused_result__; */
+#define PERL_ARGS_ASSERT_AV_TOP_INDEX
PERL_CALLCONV void Perl_av_undef(pTHX_ AV *av);
#define PERL_ARGS_ASSERT_AV_UNDEF \
@@ -630,6 +652,11 @@ PERL_CALLCONV OP * Perl_ck_trunc(pTHX_ OP *o)
#define PERL_ARGS_ASSERT_CK_TRUNC \
assert(o)
+PERL_CALLCONV OP * Perl_ck_trycatch(pTHX_ OP *o)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_CK_TRYCATCH \
+ assert(o)
+
PERL_CALLCONV void Perl_ck_warner(pTHX_ U32 err, const char* pat, ...)
__attribute__format__(__printf__,pTHX_2,pTHX_3);
#define PERL_ARGS_ASSERT_CK_WARNER \
@@ -833,12 +860,12 @@ PERL_CALLCONV SV * Perl_defelem_target(pTHX_ SV *sv, MAGIC *mg)
PERL_CALLCONV void Perl_delete_eval_scope(pTHX);
#define PERL_ARGS_ASSERT_DELETE_EVAL_SCOPE
-PERL_CALLCONV char* Perl_delimcpy(char* to, const char* toend, const char* from, const char* fromend, int delim, I32* retlen);
+PERL_CALLCONV char* Perl_delimcpy(char* to, const char* to_end, const char* from, const char* from_end, const int delim, I32* retlen);
#define PERL_ARGS_ASSERT_DELIMCPY \
- assert(to); assert(toend); assert(from); assert(fromend); assert(retlen)
-PERL_CALLCONV char* Perl_delimcpy_no_escape(char* to, const char* toend, const char* from, const char* fromend, int delim, I32* retlen);
+ assert(to); assert(to_end); assert(from); assert(from_end); assert(retlen)
+PERL_CALLCONV char* Perl_delimcpy_no_escape(char* to, const char* to_end, const char* from, const char* from_end, const int delim, I32* retlen);
#define PERL_ARGS_ASSERT_DELIMCPY_NO_ESCAPE \
- assert(to); assert(toend); assert(from); assert(fromend); assert(retlen)
+ assert(to); assert(to_end); assert(from); assert(from_end); assert(retlen)
PERL_CALLCONV void Perl_despatch_signals(pTHX);
#define PERL_ARGS_ASSERT_DESPATCH_SIGNALS
PERL_CALLCONV_NO_RET OP* Perl_die(pTHX_ const char* pat, ...)
@@ -1097,7 +1124,7 @@ PERL_CALLCONV void Perl_free_tied_hv_pool(pTHX);
#define PERL_ARGS_ASSERT_FREE_TIED_HV_POOL
PERL_CALLCONV void Perl_free_tmps(pTHX);
#define PERL_ARGS_ASSERT_FREE_TMPS
-PERL_CALLCONV SV* Perl_get_and_check_backslash_N_name(pTHX_ const char* s, const char* const e, const bool is_utf8, const char** error_msg)
+PERL_CALLCONV SV* Perl_get_and_check_backslash_N_name(pTHX_ const char* s, const char* e, const bool is_utf8, const char** error_msg)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_GET_AND_CHECK_BACKSLASH_N_NAME \
assert(s); assert(e); assert(error_msg)
@@ -1309,7 +1336,7 @@ PERL_CALLCONV GV* Perl_gv_fetchmethod_pvn_flags(pTHX_ HV* stash, const char* nam
PERL_CALLCONV GV* Perl_gv_fetchmethod_sv_flags(pTHX_ HV* stash, SV* namesv, U32 flags);
#define PERL_ARGS_ASSERT_GV_FETCHMETHOD_SV_FLAGS \
assert(stash); assert(namesv)
-PERL_CALLCONV GV* Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, const svtype sv_type);
+PERL_CALLCONV GV* Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 flags, const svtype sv_type);
#define PERL_ARGS_ASSERT_GV_FETCHPV \
assert(nambeg)
PERL_CALLCONV GV* Perl_gv_fetchpvn_flags(pTHX_ const char* name, STRLEN len, I32 flags, const svtype sv_type);
@@ -1354,9 +1381,9 @@ PERL_CALLCONV void Perl_gv_name_set(pTHX_ GV* gv, const char *name, U32 len, U32
PERL_CALLCONV GV * Perl_gv_override(pTHX_ const char * const name, const STRLEN len);
#define PERL_ARGS_ASSERT_GV_OVERRIDE \
assert(name)
-PERL_CALLCONV void Perl_gv_setref(pTHX_ SV *const dstr, SV *const sstr);
+PERL_CALLCONV void Perl_gv_setref(pTHX_ SV *const dsv, SV *const ssv);
#define PERL_ARGS_ASSERT_GV_SETREF \
- assert(dstr); assert(sstr)
+ assert(dsv); assert(ssv)
PERL_CALLCONV HV* Perl_gv_stashpv(pTHX_ const char* name, I32 flags);
#define PERL_ARGS_ASSERT_GV_STASHPV \
assert(name)
@@ -1853,9 +1880,15 @@ PERL_CALLCONV int Perl_magic_existspack(pTHX_ SV* sv, const MAGIC* mg);
PERL_CALLCONV int Perl_magic_freearylen_p(pTHX_ SV* sv, MAGIC* mg);
#define PERL_ARGS_ASSERT_MAGIC_FREEARYLEN_P \
assert(sv); assert(mg)
+PERL_CALLCONV int Perl_magic_freemglob(pTHX_ SV* sv, MAGIC* mg);
+#define PERL_ARGS_ASSERT_MAGIC_FREEMGLOB \
+ assert(sv); assert(mg)
PERL_CALLCONV int Perl_magic_freeovrld(pTHX_ SV* sv, MAGIC* mg);
#define PERL_ARGS_ASSERT_MAGIC_FREEOVRLD \
assert(sv); assert(mg)
+PERL_CALLCONV int Perl_magic_freeutf8(pTHX_ SV* sv, MAGIC* mg);
+#define PERL_ARGS_ASSERT_MAGIC_FREEUTF8 \
+ assert(sv); assert(mg)
PERL_CALLCONV int Perl_magic_get(pTHX_ SV* sv, MAGIC* mg);
#define PERL_ARGS_ASSERT_MAGIC_GET \
assert(sv); assert(mg)
@@ -2128,10 +2161,8 @@ PERL_CALLCONV I32 Perl_my_fflush_all(pTHX);
#define PERL_ARGS_ASSERT_MY_FFLUSH_ALL
PERL_CALLCONV Pid_t Perl_my_fork(void);
#define PERL_ARGS_ASSERT_MY_FORK
-#ifndef NO_MATHOMS
-PERL_CALLCONV I32 Perl_my_lstat(pTHX);
+/* PERL_CALLCONV I32 my_lstat(pTHX); */
#define PERL_ARGS_ASSERT_MY_LSTAT
-#endif
PERL_CALLCONV I32 Perl_my_lstat_flags(pTHX_ const U32 flags);
#define PERL_ARGS_ASSERT_MY_LSTAT_FLAGS
PERL_CALLCONV int Perl_my_mkostemp_cloexec(char *templte, int flags)
@@ -2156,10 +2187,8 @@ PERL_CALLCONV int Perl_my_snprintf(char *buffer, const Size_t len, const char *f
PERL_CALLCONV int Perl_my_socketpair(int family, int type, int protocol, int fd[2]);
#define PERL_ARGS_ASSERT_MY_SOCKETPAIR
-#ifndef NO_MATHOMS
-PERL_CALLCONV I32 Perl_my_stat(pTHX);
+/* PERL_CALLCONV I32 my_stat(pTHX); */
#define PERL_ARGS_ASSERT_MY_STAT
-#endif
PERL_CALLCONV I32 Perl_my_stat_flags(pTHX_ const U32 flags);
#define PERL_ARGS_ASSERT_MY_STAT_FLAGS
PERL_CALLCONV char* Perl_my_strerror(pTHX_ const int errnum);
@@ -2459,6 +2488,11 @@ PERL_CALLCONV SV* Perl_newSVuv(pTHX_ const UV u)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_NEWSVUV
+PERL_CALLCONV OP* Perl_newTRYCATCHOP(pTHX_ I32 flags, OP* tryblock, OP *catchvar, OP* catchblock)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWTRYCATCHOP \
+ assert(tryblock); assert(catchvar); assert(catchblock)
+
PERL_CALLCONV OP* Perl_newUNOP(pTHX_ I32 type, I32 flags, OP* first)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_NEWUNOP
@@ -2509,6 +2543,9 @@ PERL_CALLCONV char* Perl_ninstr(const char* big, const char* bigend, const char*
#define PERL_ARGS_ASSERT_NINSTR \
assert(big); assert(bigend); assert(little); assert(lend)
+PERL_CALLCONV void Perl_no_bareword_filehandle(pTHX_ const char *fhname);
+#define PERL_ARGS_ASSERT_NO_BAREWORD_FILEHANDLE \
+ assert(fhname)
PERL_CALLCONV_NO_RET void Perl_noperl_die(const char* pat, ...)
__attribute__noreturn__
__attribute__format__(__printf__,1,2);
@@ -2579,10 +2616,12 @@ PERL_CALLCONV void Perl_optimize_optree(pTHX_ OP* o);
#define PERL_ARGS_ASSERT_OPTIMIZE_OPTREE \
assert(o)
#ifndef NO_MATHOMS
-PERL_CALLCONV void Perl_pack_cat(pTHX_ SV *cat, const char *pat, const char *patend, SV **beglist, SV **endlist, SV ***next_in_list, U32 flags);
+PERL_CALLCONV void Perl_pack_cat(pTHX_ SV *cat, const char *pat, const char *patend, SV **beglist, SV **endlist, SV ***next_in_list, U32 flags)
+ __attribute__deprecated__;
#define PERL_ARGS_ASSERT_PACK_CAT \
assert(cat); assert(pat); assert(patend); assert(beglist); assert(endlist); assert(next_in_list)
#endif
+
PERL_CALLCONV void Perl_package(pTHX_ OP* o);
#define PERL_ARGS_ASSERT_PACKAGE \
assert(o)
@@ -2613,6 +2652,7 @@ PERL_CALLCONV void Perl_pad_block_start(pTHX_ int full);
#define PERL_ARGS_ASSERT_PAD_BLOCK_START
#ifndef NO_MATHOMS
PERL_CALLCONV HV* Perl_pad_compname_type(pTHX_ const PADOFFSET po)
+ __attribute__deprecated__
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_PAD_COMPNAME_TYPE
#endif
@@ -3241,7 +3281,7 @@ PERL_CALLCONV char* Perl_sv_2pv(pTHX_ SV *sv, STRLEN *lp);
#define PERL_ARGS_ASSERT_SV_2PV \
assert(sv)
#endif
-PERL_CALLCONV char* Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags);
+PERL_CALLCONV char* Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const U32 flags);
#define PERL_ARGS_ASSERT_SV_2PV_FLAGS \
assert(sv)
#ifndef NO_MATHOMS
@@ -3298,15 +3338,15 @@ PERL_CALLCONV SV* Perl_sv_bless(pTHX_ SV *const sv, HV *const stash);
PERL_CALLCONV bool Perl_sv_cat_decode(pTHX_ SV* dsv, SV *encoding, SV *ssv, int *offset, char* tstr, int tlen);
#define PERL_ARGS_ASSERT_SV_CAT_DECODE \
assert(dsv); assert(encoding); assert(ssv); assert(offset); assert(tstr)
-PERL_CALLCONV void Perl_sv_catpv(pTHX_ SV *const sv, const char* ptr);
+PERL_CALLCONV void Perl_sv_catpv(pTHX_ SV *const dsv, const char* sstr);
#define PERL_ARGS_ASSERT_SV_CATPV \
- assert(sv)
-PERL_CALLCONV void Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags);
+ assert(dsv)
+PERL_CALLCONV void Perl_sv_catpv_flags(pTHX_ SV *dsv, const char *sstr, const I32 flags);
#define PERL_ARGS_ASSERT_SV_CATPV_FLAGS \
- assert(dstr); assert(sstr)
-PERL_CALLCONV void Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr);
+ assert(dsv); assert(sstr)
+PERL_CALLCONV void Perl_sv_catpv_mg(pTHX_ SV *const dsv, const char *const sstr);
#define PERL_ARGS_ASSERT_SV_CATPV_MG \
- assert(sv)
+ assert(dsv)
PERL_CALLCONV void Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
__attribute__format__(__printf__,pTHX_2,pTHX_3);
#define PERL_ARGS_ASSERT_SV_CATPVF \
@@ -3322,24 +3362,24 @@ PERL_CALLCONV void Perl_sv_catpvn(pTHX_ SV *dsv, const char *sstr, STRLEN len);
#define PERL_ARGS_ASSERT_SV_CATPVN \
assert(dsv); assert(sstr)
#endif
-PERL_CALLCONV void Perl_sv_catpvn_flags(pTHX_ SV *const dstr, const char *sstr, const STRLEN len, const I32 flags);
+PERL_CALLCONV void Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN len, const I32 flags);
#define PERL_ARGS_ASSERT_SV_CATPVN_FLAGS \
- assert(dstr); assert(sstr)
+ assert(dsv); assert(sstr)
#ifndef NO_MATHOMS
-PERL_CALLCONV void Perl_sv_catpvn_mg(pTHX_ SV *sv, const char *ptr, STRLEN len);
+PERL_CALLCONV void Perl_sv_catpvn_mg(pTHX_ SV *dsv, const char *sstr, STRLEN len);
#define PERL_ARGS_ASSERT_SV_CATPVN_MG \
- assert(sv); assert(ptr)
+ assert(dsv); assert(sstr)
#endif
#ifndef NO_MATHOMS
-PERL_CALLCONV void Perl_sv_catsv(pTHX_ SV *dstr, SV *sstr);
+PERL_CALLCONV void Perl_sv_catsv(pTHX_ SV *dsv, SV *sstr);
#define PERL_ARGS_ASSERT_SV_CATSV \
- assert(dstr)
+ assert(dsv)
#endif
-PERL_CALLCONV void Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags);
+PERL_CALLCONV void Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const sstr, const I32 flags);
#define PERL_ARGS_ASSERT_SV_CATSV_FLAGS \
assert(dsv)
#ifndef NO_MATHOMS
-PERL_CALLCONV void Perl_sv_catsv_mg(pTHX_ SV *dsv, SV *ssv);
+PERL_CALLCONV void Perl_sv_catsv_mg(pTHX_ SV *dsv, SV *sstr);
#define PERL_ARGS_ASSERT_SV_CATSV_MG \
assert(dsv)
#endif
@@ -3589,7 +3629,7 @@ PERL_CALLCONV char* Perl_sv_pvn_force(pTHX_ SV* sv, STRLEN* lp);
#define PERL_ARGS_ASSERT_SV_PVN_FORCE \
assert(sv)
#endif
-PERL_CALLCONV char* Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags);
+PERL_CALLCONV char* Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const U32 flags);
#define PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS \
assert(sv)
#ifndef NO_MATHOMS
@@ -3716,16 +3756,16 @@ PERL_CALLCONV SV* Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classn
#define PERL_ARGS_ASSERT_SV_SETREF_UV \
assert(rv)
#ifndef NO_MATHOMS
-PERL_CALLCONV void Perl_sv_setsv(pTHX_ SV *dstr, SV *sstr);
+PERL_CALLCONV void Perl_sv_setsv(pTHX_ SV *dsv, SV *ssv);
#define PERL_ARGS_ASSERT_SV_SETSV \
- assert(dstr)
+ assert(dsv)
#endif
-PERL_CALLCONV void Perl_sv_setsv_flags(pTHX_ SV *dstr, SV *sstr, const I32 flags);
+PERL_CALLCONV void Perl_sv_setsv_flags(pTHX_ SV *dsv, SV *ssv, const I32 flags);
#define PERL_ARGS_ASSERT_SV_SETSV_FLAGS \
- assert(dstr)
-PERL_CALLCONV void Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr);
+ assert(dsv)
+PERL_CALLCONV void Perl_sv_setsv_mg(pTHX_ SV *const dsv, SV *const ssv);
#define PERL_ARGS_ASSERT_SV_SETSV_MG \
- assert(dstr)
+ assert(dsv)
PERL_CALLCONV void Perl_sv_setuv(pTHX_ SV *const sv, const UV num);
#define PERL_ARGS_ASSERT_SV_SETUV \
assert(sv)
@@ -4186,13 +4226,6 @@ PERL_CALLCONV bool Perl_do_exec(pTHX_ const char* cmd);
#define PERL_ARGS_ASSERT_DO_EXEC \
assert(cmd)
#endif
-#if !(defined(PERL_GLOBAL_STRUCT_PRIVATE))
-# if defined(PERL_IMPLICIT_CONTEXT)
-PERL_CALLCONV void* Perl_my_cxt_init(pTHX_ int *indexp, size_t size);
-#define PERL_ARGS_ASSERT_MY_CXT_INIT \
- assert(indexp)
-# endif
-#endif
#if !(defined(PERL_USE_3ARG_SIGHANDLER))
PERL_CALLCONV Signal_t Perl_csighandler(int sig);
#define PERL_ARGS_ASSERT_CSIGHANDLER
@@ -4446,6 +4479,11 @@ PERL_STATIC_INLINE void Perl_cx_pushsub(pTHX_ PERL_CONTEXT *cx, CV *cv, OP *reto
assert(cx); assert(cv)
#endif
#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE void Perl_cx_pushtry(pTHX_ PERL_CONTEXT *cx, OP *retop);
+#define PERL_ARGS_ASSERT_CX_PUSHTRY \
+ assert(cx)
+#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
PERL_STATIC_INLINE void Perl_cx_pushwhen(pTHX_ PERL_CONTEXT *cx);
#define PERL_ARGS_ASSERT_CX_PUSHWHEN \
assert(cx)
@@ -4477,6 +4515,10 @@ STATIC void S_validate_suid(pTHX_ PerlIO *rsfp);
assert(rsfp)
# endif
#endif
+#if !defined(USE_ITHREADS)
+/* PERL_CALLCONV void CopFILEGV_set(pTHX_ COP * c, GV * gv); */
+#define PERL_ARGS_ASSERT_COPFILEGV_SET
+#endif
#if !defined(UV_IS_QUAD)
# if defined(PERL_IN_UTF8_C)
STATIC int S_is_utf8_cp_above_31_bits(const U8 * const s, const U8 * const e, const bool consider_overlongs)
@@ -4697,9 +4739,9 @@ PERL_CALLCONV MEM_SIZE Perl_malloced_size(void *p)
#endif
#if defined(PERL_ANY_COW)
-PERL_CALLCONV SV* Perl_sv_setsv_cow(pTHX_ SV* dstr, SV* sstr);
+PERL_CALLCONV SV* Perl_sv_setsv_cow(pTHX_ SV* dsv, SV* ssv);
#define PERL_ARGS_ASSERT_SV_SETSV_COW \
- assert(sstr)
+ assert(ssv)
#endif
#if defined(PERL_CORE)
PERL_CALLCONV void Perl_opslab_force_free(pTHX_ OPSLAB *slab);
@@ -4795,25 +4837,6 @@ PERL_CALLCONV GV* Perl_gv_SVadd(pTHX_ GV *gv);
#define PERL_ARGS_ASSERT_GV_SVADD
#endif
#endif
-#if defined(PERL_GLOBAL_STRUCT)
-PERL_CALLCONV struct perl_vars * Perl_GetVars(pTHX);
-#define PERL_ARGS_ASSERT_GETVARS
-PERL_CALLCONV void Perl_free_global_struct(pTHX_ struct perl_vars *plvarsp);
-#define PERL_ARGS_ASSERT_FREE_GLOBAL_STRUCT \
- assert(plvarsp)
-PERL_CALLCONV struct perl_vars* Perl_init_global_struct(pTHX);
-#define PERL_ARGS_ASSERT_INIT_GLOBAL_STRUCT
-#endif
-#if defined(PERL_GLOBAL_STRUCT_PRIVATE)
-# if defined(PERL_IMPLICIT_CONTEXT)
-PERL_CALLCONV int Perl_my_cxt_index(pTHX_ const char *my_cxt_key);
-#define PERL_ARGS_ASSERT_MY_CXT_INDEX \
- assert(my_cxt_key)
-PERL_CALLCONV void* Perl_my_cxt_init(pTHX_ const char *my_cxt_key, size_t size);
-#define PERL_ARGS_ASSERT_MY_CXT_INIT \
- assert(my_cxt_key)
-# endif
-#endif
#if defined(PERL_IMPLICIT_CONTEXT)
PERL_CALLCONV_NO_RET void Perl_croak_nocontext(const char* pat, ...)
__attribute__noreturn__
@@ -4851,6 +4874,9 @@ PERL_CALLCONV SV* Perl_mess_nocontext(const char* pat, ...)
#define PERL_ARGS_ASSERT_MESS_NOCONTEXT \
assert(pat)
+PERL_CALLCONV void* Perl_my_cxt_init(pTHX_ int *indexp, size_t size);
+#define PERL_ARGS_ASSERT_MY_CXT_INIT \
+ assert(indexp)
PERL_CALLCONV SV* Perl_newSVpvf_nocontext(const char *const pat, ...)
__attribute__format__(__printf__,1,2);
#define PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT \
@@ -5750,6 +5776,9 @@ STATIC SV * S_get_ANYOFM_contents(pTHX_ const regnode * n)
STATIC SV* S_get_ANYOF_cp_list_for_ssc(pTHX_ const RExC_state_t *pRExC_state, const regnode_charclass* const node);
#define PERL_ARGS_ASSERT_GET_ANYOF_CP_LIST_FOR_SSC \
assert(pRExC_state); assert(node)
+STATIC U32 S_get_quantifier_value(pTHX_ RExC_state_t *pRExC_state, const char * start, const char * end);
+#define PERL_ARGS_ASSERT_GET_QUANTIFIER_VALUE \
+ assert(pRExC_state); assert(start); assert(end)
STATIC bool S_grok_bslash_N(pTHX_ RExC_state_t *pRExC_state, regnode_offset* nodep, UV *code_point_p, int* cp_count, I32 *flagp, const bool strict, const U32 depth);
#define PERL_ARGS_ASSERT_GROK_BSLASH_N \
assert(pRExC_state); assert(flagp)
@@ -5803,11 +5832,6 @@ STATIC SV* S_make_exactf_invlist(pTHX_ RExC_state_t *pRExC_state, regnode *node)
STATIC I32 S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch, regnode *first, regnode *last, regnode *tail, U32 word_count, U32 flags, U32 depth);
#define PERL_ARGS_ASSERT_MAKE_TRIE \
assert(pRExC_state); assert(startbranch); assert(first); assert(last); assert(tail)
-STATIC bool S_new_regcurly(const char *s, const char *e)
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_NEW_REGCURLY \
- assert(s); assert(e)
-
STATIC void S_nextchar(pTHX_ RExC_state_t *pRExC_state);
#define PERL_ARGS_ASSERT_NEXTCHAR \
assert(pRExC_state)
@@ -6138,12 +6162,10 @@ PERL_CALLCONV SV* Perl_invlist_clone(pTHX_ SV* const invlist, SV* newlist);
assert(invlist)
#endif
#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C)
-#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE bool S_regcurly(const char *s)
+PERL_CALLCONV bool Perl_regcurly(const char *s, const char *e, const char * result[5])
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_REGCURLY \
- assert(s)
-#endif
+ assert(s); assert(e)
#endif
#if defined(PERL_IN_REGEXEC_C)
@@ -6207,6 +6229,10 @@ PERL_STATIC_INLINE I32 S_foldEQ_latin1_s2_folded(const char* a, const char* b, I
#define PERL_ARGS_ASSERT_FOLDEQ_LATIN1_S2_FOLDED \
assert(a); assert(b)
#endif
+STATIC bool S_isFOO_lc(pTHX_ const U8 classnum, const U8 character)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_ISFOO_LC
+
STATIC bool S_isFOO_utf8_lc(pTHX_ const U8 classnum, const U8* character, const U8* e)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_ISFOO_UTF8_LC \
@@ -6288,12 +6314,6 @@ STATIC void S_to_utf8_substr(pTHX_ regexp * prog);
#define PERL_ARGS_ASSERT_TO_UTF8_SUBSTR \
assert(prog)
#endif
-#if defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_UTF8_C)
-PERL_CALLCONV bool Perl_isFOO_lc(pTHX_ const U8 classnum, const U8 character)
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_ISFOO_LC
-
-#endif
#if defined(PERL_IN_SCOPE_C)
STATIC void S_save_pushptri32ptr(pTHX_ void *const ptr1, const I32 i, void *const ptr2, const int type);
#define PERL_ARGS_ASSERT_SAVE_PUSHPTRI32PTR
@@ -6331,9 +6351,9 @@ STATIC SV* S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit
STATIC bool S_glob_2number(pTHX_ GV* const gv);
#define PERL_ARGS_ASSERT_GLOB_2NUMBER \
assert(gv)
-STATIC void S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype);
+STATIC void S_glob_assign_glob(pTHX_ SV *const dsv, SV *const ssv, const int dtype);
#define PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB \
- assert(dstr); assert(sstr)
+ assert(dsv); assert(ssv)
STATIC SV * S_more_sv(pTHX);
#define PERL_ARGS_ASSERT_MORE_SV
STATIC void S_not_a_number(pTHX_ SV *const sv);
@@ -6390,10 +6410,10 @@ STATIC I32 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask);
#define PERL_ARGS_ASSERT_VISIT \
assert(f)
# if defined(USE_ITHREADS)
-STATIC SV* S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
+STATIC SV* S_sv_dup_common(pTHX_ const SV *const ssv, CLONE_PARAMS *const param)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_SV_DUP_COMMON \
- assert(sstr); assert(param)
+ assert(ssv); assert(param)
STATIC SV ** S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest, SSize_t items, CLONE_PARAMS *const param);
#define PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE \
@@ -6768,9 +6788,9 @@ PERL_CALLCONV void Perl_re_dup_guts(pTHX_ const REGEXP *sstr, REGEXP *dstr, CLON
PERL_CALLCONV void* Perl_regdupe_internal(pTHX_ REGEXP * const r, CLONE_PARAMS* param);
#define PERL_ARGS_ASSERT_REGDUPE_INTERNAL \
assert(r); assert(param)
-PERL_CALLCONV void Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param);
+PERL_CALLCONV void Perl_rvpv_dup(pTHX_ SV *const dsv, const SV *const ssv, CLONE_PARAMS *const param);
#define PERL_ARGS_ASSERT_RVPV_DUP \
- assert(dstr); assert(sstr); assert(param)
+ assert(dsv); assert(ssv); assert(param)
PERL_CALLCONV PERL_SI* Perl_si_dup(pTHX_ PERL_SI* si, CLONE_PARAMS* param)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_SI_DUP \
@@ -6781,12 +6801,12 @@ PERL_CALLCONV ANY* Perl_ss_dup(pTHX_ PerlInterpreter* proto_perl, CLONE_PARAMS*
#define PERL_ARGS_ASSERT_SS_DUP \
assert(proto_perl); assert(param)
-PERL_CALLCONV SV* Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
+PERL_CALLCONV SV* Perl_sv_dup(pTHX_ const SV *const ssv, CLONE_PARAMS *const param)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_SV_DUP \
assert(param)
-PERL_CALLCONV SV* Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
+PERL_CALLCONV SV* Perl_sv_dup_inc(pTHX_ const SV *const ssv, CLONE_PARAMS *const param)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_SV_DUP_INC \
assert(param)
@@ -6797,6 +6817,9 @@ PERL_CALLCONV bool Perl__is_cur_LC_category_utf8(pTHX_ int category);
#define PERL_ARGS_ASSERT__IS_CUR_LC_CATEGORY_UTF8
#endif
#if defined(USE_LOCALE_COLLATE)
+PERL_CALLCONV int Perl_magic_freecollxfrm(pTHX_ SV* sv, MAGIC* mg);
+#define PERL_ARGS_ASSERT_MAGIC_FREECOLLXFRM \
+ assert(sv); assert(mg)
PERL_CALLCONV int Perl_magic_setcollxfrm(pTHX_ SV* sv, MAGIC* mg);
#define PERL_ARGS_ASSERT_MAGIC_SETCOLLXFRM \
assert(sv); assert(mg)
@@ -6894,7 +6917,7 @@ PERL_CALLCONV_NO_RET void win32_croak_not_implemented(const char * fname)
assert(fname)
#endif
-#if defined(WIN32) || defined(__SYMBIAN32__) || defined(VMS)
+#if defined(WIN32) || defined(VMS)
PERL_CALLCONV int Perl_do_aspawn(pTHX_ SV* really, SV** mark, SV** sp);
#define PERL_ARGS_ASSERT_DO_ASPAWN \
assert(mark); assert(sp)
diff --git a/Master/tlpkg/tlperl/lib/CORE/reentr.h b/Master/tlpkg/tlperl/lib/CORE/reentr.h
index cf419006837..fefb3f065bf 100644
--- a/Master/tlpkg/tlperl/lib/CORE/reentr.h
+++ b/Master/tlpkg/tlperl/lib/CORE/reentr.h
@@ -41,6 +41,12 @@
#ifdef USE_REENTRANT_API
+/* For thread-safe builds, alternative methods are used to make calls to this
+ * safe. */
+#ifdef USE_THREAD_SAFE_LOCALE
+# undef HAS_SETLOCALE_R
+#endif
+
/* Deprecations: some platforms have the said reentrant interfaces
* but they are declared obsolete and are not to be used. Often this
* means that the platform has threadsafed the interfaces (hopefully).
@@ -647,165 +653,165 @@
typedef struct {
# ifdef HAS_ASCTIME_R
- char* _asctime_buffer;
- size_t _asctime_size;
+ char* _asctime_buffer;
+ size_t _asctime_size;
# endif /* HAS_ASCTIME_R */
# ifdef HAS_CRYPT_R
# if CRYPT_R_PROTO == REENTRANT_PROTO_B_CCD
- CRYPTD* _crypt_data;
+ CRYPTD* _crypt_data;
# else
- struct crypt_data *_crypt_struct_buffer;
+ struct crypt_data *_crypt_struct_buffer;
# endif
# endif /* HAS_CRYPT_R */
# ifdef HAS_CTIME_R
- char* _ctime_buffer;
- size_t _ctime_size;
+ char* _ctime_buffer;
+ size_t _ctime_size;
# endif /* HAS_CTIME_R */
# ifdef HAS_GETGRNAM_R
- struct group _grent_struct;
- char* _grent_buffer;
- size_t _grent_size;
+ struct group _grent_struct;
+ char* _grent_buffer;
+ size_t _grent_size;
# ifdef USE_GRENT_PTR
- struct group* _grent_ptr;
+ struct group* _grent_ptr;
# endif
# ifdef USE_GRENT_FPTR
- FILE* _grent_fptr;
+ FILE* _grent_fptr;
# endif
# endif /* HAS_GETGRNAM_R */
# ifdef HAS_GETHOSTBYNAME_R
- struct hostent _hostent_struct;
+ struct hostent _hostent_struct;
# if GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD
- struct hostent_data _hostent_data;
+ struct hostent_data _hostent_data;
# else
- char* _hostent_buffer;
- size_t _hostent_size;
+ char* _hostent_buffer;
+ size_t _hostent_size;
# endif
# ifdef USE_HOSTENT_PTR
- struct hostent* _hostent_ptr;
+ struct hostent* _hostent_ptr;
# endif
# ifdef USE_HOSTENT_ERRNO
- int _hostent_errno;
+ int _hostent_errno;
# endif
# endif /* HAS_GETHOSTBYNAME_R */
# ifdef HAS_GETLOGIN_R
- char* _getlogin_buffer;
- size_t _getlogin_size;
+ char* _getlogin_buffer;
+ size_t _getlogin_size;
# endif /* HAS_GETLOGIN_R */
# ifdef HAS_GETNETBYNAME_R
- struct netent _netent_struct;
+ struct netent _netent_struct;
# if GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD
- struct netent_data _netent_data;
+ struct netent_data _netent_data;
# else
- char* _netent_buffer;
- size_t _netent_size;
+ char* _netent_buffer;
+ size_t _netent_size;
# endif
# ifdef USE_NETENT_PTR
- struct netent* _netent_ptr;
+ struct netent* _netent_ptr;
# endif
# ifdef USE_NETENT_ERRNO
- int _netent_errno;
+ int _netent_errno;
# endif
# endif /* HAS_GETNETBYNAME_R */
# ifdef HAS_GETPROTOBYNAME_R
- struct protoent _protoent_struct;
+ struct protoent _protoent_struct;
# if GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD
- struct protoent_data _protoent_data;
+ struct protoent_data _protoent_data;
# else
- char* _protoent_buffer;
- size_t _protoent_size;
+ char* _protoent_buffer;
+ size_t _protoent_size;
# endif
# ifdef USE_PROTOENT_PTR
- struct protoent* _protoent_ptr;
+ struct protoent* _protoent_ptr;
# endif
# ifdef USE_PROTOENT_ERRNO
- int _protoent_errno;
+ int _protoent_errno;
# endif
# endif /* HAS_GETPROTOBYNAME_R */
# ifdef HAS_GETPWNAM_R
- struct passwd _pwent_struct;
- char* _pwent_buffer;
- size_t _pwent_size;
+ struct passwd _pwent_struct;
+ char* _pwent_buffer;
+ size_t _pwent_size;
# ifdef USE_PWENT_PTR
- struct passwd* _pwent_ptr;
+ struct passwd* _pwent_ptr;
# endif
# ifdef USE_PWENT_FPTR
- FILE* _pwent_fptr;
+ FILE* _pwent_fptr;
# endif
# endif /* HAS_GETPWNAM_R */
# ifdef HAS_GETSERVBYNAME_R
- struct servent _servent_struct;
+ struct servent _servent_struct;
# if GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_I_CCSD
- struct servent_data _servent_data;
+ struct servent_data _servent_data;
# else
- char* _servent_buffer;
- size_t _servent_size;
+ char* _servent_buffer;
+ size_t _servent_size;
# endif
# ifdef USE_SERVENT_PTR
- struct servent* _servent_ptr;
+ struct servent* _servent_ptr;
# endif
# ifdef USE_SERVENT_ERRNO
- int _servent_errno;
+ int _servent_errno;
# endif
# endif /* HAS_GETSERVBYNAME_R */
# ifdef HAS_GETSPNAM_R
- struct spwd _spent_struct;
- char* _spent_buffer;
- size_t _spent_size;
+ struct spwd _spent_struct;
+ char* _spent_buffer;
+ size_t _spent_size;
# ifdef USE_SPENT_PTR
- struct spwd* _spent_ptr;
+ struct spwd* _spent_ptr;
# endif
# ifdef USE_SPENT_FPTR
- FILE* _spent_fptr;
+ FILE* _spent_fptr;
# endif
# endif /* HAS_GETSPNAM_R */
# ifdef HAS_GMTIME_R
- struct tm _gmtime_struct;
+ struct tm _gmtime_struct;
# endif /* HAS_GMTIME_R */
# ifdef HAS_LOCALTIME_R
- struct tm _localtime_struct;
+ struct tm _localtime_struct;
# endif /* HAS_LOCALTIME_R */
# ifdef HAS_READDIR_R
- struct dirent* _readdir_struct;
- size_t _readdir_size;
+ struct dirent* _readdir_struct;
+ size_t _readdir_size;
# if READDIR_R_PROTO == REENTRANT_PROTO_I_TSR
- struct dirent* _readdir_ptr;
+ struct dirent* _readdir_ptr;
# endif
# endif /* HAS_READDIR_R */
# ifdef HAS_READDIR64_R
- struct dirent64* _readdir64_struct;
- size_t _readdir64_size;
+ struct dirent64* _readdir64_struct;
+ size_t _readdir64_size;
# if READDIR64_R_PROTO == REENTRANT_PROTO_I_TSR
- struct dirent64* _readdir64_ptr;
+ struct dirent64* _readdir64_ptr;
# endif
# endif /* HAS_READDIR64_R */
# ifdef HAS_SETLOCALE_R
- char* _setlocale_buffer;
- size_t _setlocale_size;
+ char* _setlocale_buffer;
+ size_t _setlocale_size;
# endif /* HAS_SETLOCALE_R */
# ifdef HAS_STRERROR_R
- char* _strerror_buffer;
- size_t _strerror_size;
+ char* _strerror_buffer;
+ size_t _strerror_size;
# endif /* HAS_STRERROR_R */
# ifdef HAS_TTYNAME_R
- char* _ttyname_buffer;
- size_t _ttyname_size;
+ char* _ttyname_buffer;
+ size_t _ttyname_size;
# endif /* HAS_TTYNAME_R */
diff --git a/Master/tlpkg/tlperl/lib/CORE/regcharclass.h b/Master/tlpkg/tlperl/lib/CORE/regcharclass.h
index 0bc48500f0d..808ae557979 100644
--- a/Master/tlpkg/tlperl/lib/CORE/regcharclass.h
+++ b/Master/tlpkg/tlperl/lib/CORE/regcharclass.h
@@ -28,23 +28,23 @@
/*** GENERATED CODE ***/
#define is_LNBREAK_safe(s,e,is_utf8) \
( ((e)-(s) > 2) ? \
- ( ( inRANGE(((const U8*)s)[0], 0x0A, 0x0C ) ) ? 1 \
- : ( 0x0D == ((const U8*)s)[0] ) ? \
- ( ( 0x0A == ((const U8*)s)[1] ) ? 2 : 1 ) \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\n', '\f') ) ? 1 \
+ : ( '\r' == ((const U8*)s)[0] ) ? \
+ ( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 ) \
: ( is_utf8 ) ? \
( ( 0xC2 == ((const U8*)s)[0] ) ? \
( ( 0x85 == ((const U8*)s)[1] ) ? 2 : 0 ) \
- : ( ( ( 0xE2 == ((const U8*)s)[0] ) && ( 0x80 == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0xA8, 0xA9 ) ) ) ? 3 : 0 )\
+ : ( ( ( 0xE2 == ((const U8*)s)[0] ) && ( 0x80 == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0xA8, 0xA9) ) ) ? 3 : 0 )\
: ( 0x85 == ((const U8*)s)[0] ) ) \
: ((e)-(s) > 1) ? \
- ( ( inRANGE(((const U8*)s)[0], 0x0A, 0x0C ) ) ? 1 \
- : ( 0x0D == ((const U8*)s)[0] ) ? \
- ( ( 0x0A == ((const U8*)s)[1] ) ? 2 : 1 ) \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\n', '\f') ) ? 1 \
+ : ( '\r' == ((const U8*)s)[0] ) ? \
+ ( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 ) \
: ( is_utf8 ) ? \
( ( ( 0xC2 == ((const U8*)s)[0] ) && ( 0x85 == ((const U8*)s)[1] ) ) ? 2 : 0 )\
: ( 0x85 == ((const U8*)s)[0] ) ) \
: ((e)-(s) > 0) ? \
- ( ( inRANGE(((const U8*)s)[0], 0x0A, 0x0D ) ) ? 1 \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\n', '\r') ) ? 1 \
: ( !( is_utf8 ) ) ? \
( 0x85 == ((const U8*)s)[0] ) \
: 0 ) \
@@ -53,30 +53,30 @@
/*** GENERATED CODE ***/
#define is_LNBREAK_utf8_safe(s,e) \
( ((e)-(s) > 2) ? \
- ( ( inRANGE(((const U8*)s)[0], 0x0A, 0x0C ) ) ? 1 \
- : ( 0x0D == ((const U8*)s)[0] ) ? \
- ( ( 0x0A == ((const U8*)s)[1] ) ? 2 : 1 ) \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\n', '\f') ) ? 1 \
+ : ( '\r' == ((const U8*)s)[0] ) ? \
+ ( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 ) \
: ( 0xC2 == ((const U8*)s)[0] ) ? \
( ( 0x85 == ((const U8*)s)[1] ) ? 2 : 0 ) \
- : ( ( ( 0xE2 == ((const U8*)s)[0] ) && ( 0x80 == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0xA8, 0xA9 ) ) ) ? 3 : 0 )\
+ : ( ( ( 0xE2 == ((const U8*)s)[0] ) && ( 0x80 == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0xA8, 0xA9) ) ) ? 3 : 0 )\
: ((e)-(s) > 1) ? \
- ( ( inRANGE(((const U8*)s)[0], 0x0A, 0x0C ) ) ? 1 \
- : ( 0x0D == ((const U8*)s)[0] ) ? \
- ( ( 0x0A == ((const U8*)s)[1] ) ? 2 : 1 ) \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\n', '\f') ) ? 1 \
+ : ( '\r' == ((const U8*)s)[0] ) ? \
+ ( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 ) \
: ( ( 0xC2 == ((const U8*)s)[0] ) && ( 0x85 == ((const U8*)s)[1] ) ) ? 2 : 0 )\
: ((e)-(s) > 0) ? \
- ( inRANGE(((const U8*)s)[0], 0x0A, 0x0D ) ) \
+ ( inRANGE_helper_(U8, ((const U8*)s)[0], '\n', '\r') ) \
: 0 )
/*** GENERATED CODE ***/
#define is_LNBREAK_latin1_safe(s,e) \
( ((e)-(s) > 1) ? \
- ( ( inRANGE(((const U8*)s)[0], 0x0A, 0x0C ) || 0x85 == ((const U8*)s)[0] ) ? 1\
- : ( 0x0D == ((const U8*)s)[0] ) ? \
- ( ( 0x0A == ((const U8*)s)[1] ) ? 2 : 1 ) \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\n', '\f') || 0x85 == ((const U8*)s)[0] ) ? 1\
+ : ( '\r' == ((const U8*)s)[0] ) ? \
+ ( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 ) \
: 0 ) \
: ((e)-(s) > 0) ? \
- ( inRANGE(((const U8*)s)[0], 0x0A, 0x0D ) || 0x85 == ((const U8*)s)[0] )\
+ ( inRANGE_helper_(U8, ((const U8*)s)[0], '\n', '\r') || 0x85 == ((const U8*)s)[0] )\
: 0 )
/*
@@ -90,14 +90,14 @@
( ( ( 0x9A == ((const U8*)s)[1] ) && ( 0x80 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xE2 == ((const U8*)s)[0] ) ? \
( ( 0x80 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x80, 0x8A ) || 0xAF == ((const U8*)s)[2] ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x80, 0x8A) || 0xAF == ((const U8*)s)[2] ) ? 3 : 0 )\
: ( ( 0x81 == ((const U8*)s)[1] ) && ( 0x9F == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( ( ( 0xE3 == ((const U8*)s)[0] ) && ( 0x80 == ((const U8*)s)[1] ) ) && ( 0x80 == ((const U8*)s)[2] ) ) ? 3 : 0 )
/*** GENERATED CODE ***/
#define is_HORIZWS_cp_high(cp) \
( 0x1680 == cp || ( 0x1680 < cp && \
-( inRANGE(cp, 0x2000, 0x200A) || ( 0x200A < cp && \
+( inRANGE_helper_(UV, cp, 0x2000, 0x200A) || ( 0x200A < cp && \
( 0x202F == cp || ( 0x202F < cp && \
( 0x205F == cp || 0x3000 == cp ) ) ) ) ) ) )
@@ -108,11 +108,11 @@
*/
/*** GENERATED CODE ***/
#define is_VERTWS_high(s) \
-( ( ( ( 0xE2 == ((const U8*)s)[0] ) && ( 0x80 == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0xA8, 0xA9 ) ) ) ? 3 : 0 )
+( ( ( ( 0xE2 == ((const U8*)s)[0] ) && ( 0x80 == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0xA8, 0xA9) ) ) ? 3 : 0 )
/*** GENERATED CODE ***/
#define is_VERTWS_cp_high(cp) \
-( 0x2028 == cp || 0x2029 == cp )
+( inRANGE_helper_(UV, cp, 0x2028, 0x2029) )
/*
XDIGIT: Hexadecimal digits
@@ -123,14 +123,14 @@
#define is_XDIGIT_high(s) \
( ( 0xEF == ((const U8*)s)[0] ) ? \
( ( 0xBC == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x90, 0x99 ) || inRANGE(((const U8*)s)[2], 0xA1, 0xA6 ) ) ? 3 : 0 )\
- : ( ( 0xBD == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x81, 0x86 ) ) ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x90, 0x99) || inRANGE_helper_(U8, ((const U8*)s)[2], 0xA1, 0xA6) ) ? 3 : 0 )\
+ : ( ( 0xBD == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x81, 0x86) ) ) ? 3 : 0 )\
: 0 )
/*** GENERATED CODE ***/
#define is_XDIGIT_cp_high(cp) \
-( inRANGE(cp, 0xFF10, 0xFF19) || ( 0xFF19 < cp && \
-( inRANGE(cp, 0xFF21, 0xFF26) || inRANGE(cp, 0xFF41, 0xFF46) ) ) )
+( inRANGE_helper_(UV, cp, 0xFF10, 0xFF19) || ( 0xFF19 < cp && \
+( inRANGE_helper_(UV, cp, 0xFF21, 0xFF26) || inRANGE_helper_(UV, cp, 0xFF41, 0xFF46) ) ) )
/*
XPERLSPACE: \p{XPerlSpace}
@@ -143,18 +143,17 @@
( ( ( 0x9A == ((const U8*)s)[1] ) && ( 0x80 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xE2 == ((const U8*)s)[0] ) ? \
( ( 0x80 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x80, 0x8A ) || inRANGE(((const U8*)s)[2], 0xA8, 0xA9 ) || 0xAF == ((const U8*)s)[2] ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x80, 0x8A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0xA8, 0xA9) || 0xAF == ((const U8*)s)[2] ) ? 3 : 0 )\
: ( ( 0x81 == ((const U8*)s)[1] ) && ( 0x9F == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( ( ( 0xE3 == ((const U8*)s)[0] ) && ( 0x80 == ((const U8*)s)[1] ) ) && ( 0x80 == ((const U8*)s)[2] ) ) ? 3 : 0 )
/*** GENERATED CODE ***/
#define is_XPERLSPACE_cp_high(cp) \
( 0x1680 == cp || ( 0x1680 < cp && \
-( inRANGE(cp, 0x2000, 0x200A) || ( 0x200A < cp && \
-( 0x2028 == cp || ( 0x2028 < cp && \
-( 0x2029 == cp || ( 0x2029 < cp && \
+( inRANGE_helper_(UV, cp, 0x2000, 0x200A) || ( 0x200A < cp && \
+( inRANGE_helper_(UV, cp, 0x2028, 0x2029) || ( 0x2029 < cp && \
( 0x202F == cp || ( 0x202F < cp && \
-( 0x205F == cp || 0x3000 == cp ) ) ) ) ) ) ) ) ) ) )
+( 0x205F == cp || 0x3000 == cp ) ) ) ) ) ) ) ) )
/*
NONCHAR: Non character code points
@@ -165,13 +164,13 @@
#define is_NONCHAR_utf8_safe(s,e) \
( ( ( LIKELY((e) > (s)) ) && ( LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) ) ? ( ( 0xEF == ((const U8*)s)[0] ) ?\
( ( 0xB7 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x90, 0xAF ) ) ? 3 : 0 ) \
- : ( ( 0xBF == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0xBE, 0xBF ) ) ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x90, 0xAF) ) ? 3 : 0 )\
+ : ( ( 0xBF == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0xBE, 0xBF) ) ) ? 3 : 0 )\
: ( 0xF0 == ((const U8*)s)[0] ) ? \
- ( ( ( ( ((const U8*)s)[1] == 0x9F || ( ( ((const U8*)s)[1] & 0xEF ) == 0xAF ) ) && ( 0xBF == ((const U8*)s)[2] ) ) && ( inRANGE(((const U8*)s)[3], 0xBE, 0xBF ) ) ) ? 4 : 0 )\
- : ( inRANGE(((const U8*)s)[0], 0xF1, 0xF3 ) ) ? \
- ( ( ( ( ( ((const U8*)s)[1] & 0xCF ) == 0x8F ) && ( 0xBF == ((const U8*)s)[2] ) ) && ( inRANGE(((const U8*)s)[3], 0xBE, 0xBF ) ) ) ? 4 : 0 )\
- : ( ( ( ( 0xF4 == ((const U8*)s)[0] ) && ( 0x8F == ((const U8*)s)[1] ) ) && ( 0xBF == ((const U8*)s)[2] ) ) && ( inRANGE(((const U8*)s)[3], 0xBE, 0xBF ) ) ) ? 4 : 0 ) : 0 )
+ ( ( ( ( ((const U8*)s)[1] == 0x9F || ( ( ((const U8*)s)[1] & 0xEF ) == 0xAF ) ) && ( 0xBF == ((const U8*)s)[2] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0xBE, 0xBF) ) ) ? 4 : 0 )\
+ : ( inRANGE_helper_(U8, ((const U8*)s)[0], 0xF1, 0xF3) ) ? \
+ ( ( ( ( ( ((const U8*)s)[1] & 0xCF ) == 0x8F ) && ( 0xBF == ((const U8*)s)[2] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0xBE, 0xBF) ) ) ? 4 : 0 )\
+ : ( ( ( ( 0xF4 == ((const U8*)s)[0] ) && ( 0x8F == ((const U8*)s)[1] ) ) && ( 0xBF == ((const U8*)s)[2] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0xBE, 0xBF) ) ) ? 4 : 0 ) : 0 )
/*
SURROGATE: Surrogate code points
@@ -180,7 +179,7 @@
*/
/*** GENERATED CODE ***/
#define is_SURROGATE_utf8_safe(s,e) \
-( ( ( ( ( ((e) - (s)) >= 3 ) && ( 0xED == ((const U8*)s)[0] ) ) && ( inRANGE(((const U8*)s)[1], 0xA0, 0xBF ) ) ) && ( inRANGE(((const U8*)s)[2], 0x80, 0xBF ) ) ) ? 3 : 0 )
+( ( ( ( ( ((e) - (s)) >= 3 ) && ( 0xED == ((const U8*)s)[0] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[1], 0xA0, 0xBF) ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x80, 0xBF) ) ) ? 3 : 0 )
/*
QUOTEMETA: Meta-characters that \Q should quote
@@ -195,95 +194,120 @@
( ( 0x9C == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xE1 == ((const U8*)s)[0] ) ? \
( ( 0x85 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x9F, 0xA0 ) ) ? 3 : 0 ) \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x9F, 0xA0) ) ? 3 : 0 ) \
: ( 0x9A == ((const U8*)s)[1] ) ? \
( ( 0x80 == ((const U8*)s)[2] ) ? 3 : 0 ) \
: ( 0x9E == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0xB4, 0xB5 ) ) ? 3 : 0 ) \
- : ( ( 0xA0 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x8B, 0x8E ) ) ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0xB4, 0xB5) ) ? 3 : 0 ) \
+ : ( ( 0xA0 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x8B, 0x8E) ) ) ? 3 : 0 )\
: ( 0xE2 == ((const U8*)s)[0] ) ? \
( ( 0x80 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x80, 0xBE ) ) ? 3 : 0 ) \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x80, 0xBE) ) ? 3 : 0 ) \
: ( 0x81 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x81, 0x93 ) || inRANGE(((const U8*)s)[2], 0x95, 0xAF ) ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x81, 0x93) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x95, 0xAF) ) ? 3 : 0 )\
: ( 0x86 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x90, 0xBF ) ) ? 3 : 0 ) \
- : ( inRANGE(((const U8*)s)[1], 0x87, 0x90 ) || inRANGE(((const U8*)s)[1], 0x94, 0x9C ) || inRANGE(((const U8*)s)[1], 0x9F, 0xAF ) || inRANGE(((const U8*)s)[1], 0xB8, 0xB9 ) ) ?\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x90, 0xBF) ) ? 3 : 0 ) \
+ : ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x87, 0x90) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x94, 0x9C) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x9F, 0xAF) || inRANGE_helper_(U8, ((const U8*)s)[1], 0xB8, 0xB9) ) ?\
3 \
: ( 0x91 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x80, 0x9F ) ) ? 3 : 0 ) \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x80, 0x9F) ) ? 3 : 0 ) \
: ( 0x9D == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x80, 0xB5 ) ) ? 3 : 0 ) \
- : ( ( 0x9E == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x94, 0xBF ) ) ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x80, 0xB5) ) ? 3 : 0 ) \
+ : ( ( 0x9E == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x94, 0xBF) ) ) ? 3 : 0 )\
: ( 0xE3 == ((const U8*)s)[0] ) ? \
( ( 0x80 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x80, 0x83 ) || inRANGE(((const U8*)s)[2], 0x88, 0xA0 ) || 0xB0 == ((const U8*)s)[2] ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x80, 0x83) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x88, 0xA0) || 0xB0 == ((const U8*)s)[2] ) ? 3 : 0 )\
: ( ( 0x85 == ((const U8*)s)[1] ) && ( 0xA4 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xEF == ((const U8*)s)[0] ) ? \
( ( 0xB4 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0xBE, 0xBF ) ) ? 3 : 0 ) \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0xBE, 0xBF) ) ? 3 : 0 ) \
: ( 0xB8 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x80, 0x8F ) ) ? 3 : 0 ) \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x80, 0x8F) ) ? 3 : 0 ) \
: ( 0xB9 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x85, 0x86 ) ) ? 3 : 0 ) \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x85, 0x86) ) ? 3 : 0 ) \
: ( 0xBB == ((const U8*)s)[1] ) ? \
( ( 0xBF == ((const U8*)s)[2] ) ? 3 : 0 ) \
: ( 0xBE == ((const U8*)s)[1] ) ? \
( ( 0xA0 == ((const U8*)s)[2] ) ? 3 : 0 ) \
- : ( ( 0xBF == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0xB0, 0xB8 ) ) ) ? 3 : 0 )\
+ : ( ( 0xBF == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0xB0, 0xB8) ) ) ? 3 : 0 )\
: ( 0xF0 == ((const U8*)s)[0] ) ? \
( ( 0x9B == ((const U8*)s)[1] ) ? \
- ( ( ( 0xB2 == ((const U8*)s)[2] ) && ( inRANGE(((const U8*)s)[3], 0xA0, 0xA3 ) ) ) ? 4 : 0 )\
- : ( ( ( 0x9D == ((const U8*)s)[1] ) && ( 0x85 == ((const U8*)s)[2] ) ) && ( inRANGE(((const U8*)s)[3], 0xB3, 0xBA ) ) ) ? 4 : 0 )\
+ ( ( ( 0xB2 == ((const U8*)s)[2] ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0xA0, 0xA3) ) ) ? 4 : 0 )\
+ : ( ( ( 0x9D == ((const U8*)s)[1] ) && ( 0x85 == ((const U8*)s)[2] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0xB3, 0xBA) ) ) ? 4 : 0 )\
: ( ( 0xF3 == ((const U8*)s)[0] ) && ( 0xA0 == ((const U8*)s)[1] ) ) ? 4 : 0 )
/*
MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
- &regcharclass_multi_char_folds::multi_char_folds('u', 'a')
+ %regcharclass_multi_char_folds::multi_char_folds('u', 'a')
*/
/*** GENERATED CODE ***/
-#define is_MULTI_CHAR_FOLD_utf8_safe_part0(s,e) \
-( ( 0x61 == ((const U8*)s)[0] ) ? \
- ( ( ( 0xCA == ((const U8*)s)[1] ) && ( 0xBE == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x66 == ((const U8*)s)[0] ) ? \
- ( ( 0x66 == ((const U8*)s)[1] ) ? \
- ( ( 0x69 == ((const U8*)s)[2] || 0x6C == ((const U8*)s)[2] ) ? 3 : 2 )\
- : ( 0x69 == ((const U8*)s)[1] || 0x6C == ((const U8*)s)[1] ) ? 2 : 0 )\
- : ( 0x68 == ((const U8*)s)[0] ) ? \
+#define is_MULTI_CHAR_FOLD_utf8_safe_part0_(s,e) \
+( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ? \
+ ( ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ) ? 3 : 2 )\
+ : ( ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ) ? 2 : 0 )
+
+
+/*** GENERATED CODE ***/
+#define is_MULTI_CHAR_FOLD_utf8_safe_part1_(s,e) \
+( ( ( ((const U8*)s)[0] & 0xDF ) == 'H' ) ? \
( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x69 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'I' ) ? \
( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x87 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x6A == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) ? \
( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8C == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x73 == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0x73, 0x74 ) ) ? 2 : 0 ) \
- : ( 0x74 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ? \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 'S', 'T') || inRANGE_helper_(U8, ((const U8*)s)[1], 's', 't') ) ? 2\
+ : ( ( 0xC5 == ((const U8*)s)[1] ) && ( 0xBF == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) ? \
( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x88 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x77 == ((const U8*)s)[0] || 0x79 == ((const U8*)s)[0] ) ? \
+ : ( ( ( ((const U8*)s)[0] & 0xDF ) == 'W' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ) ?\
( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xC5 == ((const U8*)s)[0] ) ? \
- ( ( ( ( 0xBF == ((const U8*)s)[1] ) && ( 0xC5 == ((const U8*)s)[2] ) ) && ( 0xBF == ((const U8*)s)[3] ) ) ? 4 : 0 )\
+ ( ( 0xBF == ((const U8*)s)[1] ) ? \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 'S', 'T') || inRANGE_helper_(U8, ((const U8*)s)[2], 's', 't') ) ? 3\
+ : ( ( 0xC5 == ((const U8*)s)[2] ) && ( 0xBF == ((const U8*)s)[3] ) ) ? 4 : 0 )\
+ : 0 ) \
: ( 0xCA == ((const U8*)s)[0] ) ? \
- ( ( ( 0xBC == ((const U8*)s)[1] ) && ( 0x6E == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ ( ( ( 0xBC == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xDF ) == 'N' ) ) ? 3 : 0 )\
: ( 0xCE == ((const U8*)s)[0] ) ? \
( ( ( ((const U8*)s)[1] & 0xFD ) == 0xAC ) ? \
( ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
: ( 0xB1 == ((const U8*)s)[1] || 0xB7 == ((const U8*)s)[1] ) ? \
( ( 0xCD == ((const U8*)s)[2] ) ? \
- ( ( 0x82 == ((const U8*)s)[3] ) ? 4 : 0 ) \
+ ( ( 0x82 == ((const U8*)s)[3] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[4] ) && ( 0xB9 == ((const U8*)s)[5] ) ) ? 6 : 4 )\
+ : 0 ) \
: ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
- : ( ( ( 0xB9 == ((const U8*)s)[1] ) && ( 0xCD == ((const U8*)s)[2] ) ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
+ : ( 0xB9 == ((const U8*)s)[1] ) ? \
+ ( ( 0xCC == ((const U8*)s)[2] ) ? \
+ ( ( 0x88 == ((const U8*)s)[3] ) ? \
+ ( ( 0xCC == ((const U8*)s)[4] ) ? \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x80, 0x81) ) ? 6 : 0 )\
+ : ( ( 0xCD == ((const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
+ : 0 ) \
+ : ( ( 0xCD == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
+ : 0 ) \
: ( 0xCF == ((const U8*)s)[0] ) ? \
( ( 0x81 == ((const U8*)s)[1] ) ? \
( ( ( 0xCC == ((const U8*)s)[2] ) && ( 0x93 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
: ( 0x85 == ((const U8*)s)[1] ) ? \
( ( 0xCC == ((const U8*)s)[2] ) ? \
- ( ( 0x93 == ((const U8*)s)[3] ) ? 4 : 0 ) \
+ ( ( 0x88 == ((const U8*)s)[3] ) ? \
+ ( ( 0xCC == ((const U8*)s)[4] ) ? \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x80, 0x81) ) ? 6 : 0 )\
+ : ( ( 0xCD == ((const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
+ : ( 0x93 == ((const U8*)s)[3] ) ? \
+ ( ( 0xCC == ((const U8*)s)[4] ) ? \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x80, 0x81) ) ? 6 : 4 )\
+ : ( ( 0xCD == ((const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 6 : 4 )\
+ : 0 ) \
: ( ( 0xCD == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
: ( 0x89 == ((const U8*)s)[1] ) ? \
( ( 0xCD == ((const U8*)s)[2] ) ? \
- ( ( 0x82 == ((const U8*)s)[3] ) ? 4 : 0 ) \
+ ( ( 0x82 == ((const U8*)s)[3] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[4] ) && ( 0xB9 == ((const U8*)s)[5] ) ) ? 6 : 4 )\
+ : 0 ) \
: ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
: ( ( ( 0x8E == ((const U8*)s)[1] ) && ( 0xCE == ((const U8*)s)[2] ) ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
: ( 0xD5 == ((const U8*)s)[0] ) ? \
@@ -300,30 +324,33 @@
/*** GENERATED CODE ***/
-#define is_MULTI_CHAR_FOLD_utf8_safe_part1(s,e) \
-( ((e)-(s) > 3) ? \
- ( ( 0x61 == ((const U8*)s)[0] ) ? \
+#define is_MULTI_CHAR_FOLD_utf8_safe_part2_(s,e) \
+( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) ? \
( ( ( 0xCA == ((const U8*)s)[1] ) && ( 0xBE == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x66 == ((const U8*)s)[0] ) ? \
- ( ( 0x66 == ((const U8*)s)[1] ) ? \
- ( ( 0x69 == ((const U8*)s)[2] || 0x6C == ((const U8*)s)[2] ) ? 3 : 2 )\
- : ( 0x69 == ((const U8*)s)[1] || 0x6C == ((const U8*)s)[1] ) ? 2 : 0 )\
- : ( 0x68 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ? \
+ ( ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ) ? 3 : 2 )\
+ : ( ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ) ? 2 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'H' ) ? \
( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x69 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'I' ) ? \
( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x87 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x6A == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) ? \
( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8C == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x73 == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0x73, 0x74 ) ) ? 2 : 0 ) \
- : ( 0x74 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ? \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 'S', 'T') || inRANGE_helper_(U8, ((const U8*)s)[1], 's', 't') ) ? 2\
+ : ( ( 0xC5 == ((const U8*)s)[1] ) && ( 0xBF == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) ? \
( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x88 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x77 == ((const U8*)s)[0] || 0x79 == ((const U8*)s)[0] ) ? \
+ : ( ( ( ((const U8*)s)[0] & 0xDF ) == 'W' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ) ?\
( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xC5 == ((const U8*)s)[0] ) ? \
- ( ( ( ( 0xBF == ((const U8*)s)[1] ) && ( 0xC5 == ((const U8*)s)[2] ) ) && ( 0xBF == ((const U8*)s)[3] ) ) ? 4 : 0 )\
+ ( ( 0xBF == ((const U8*)s)[1] ) ? \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 'S', 'T') || inRANGE_helper_(U8, ((const U8*)s)[2], 's', 't') ) ? 3\
+ : ( ( 0xC5 == ((const U8*)s)[2] ) && ( 0xBF == ((const U8*)s)[3] ) ) ? 4 : 0 )\
+ : 0 ) \
: ( 0xCA == ((const U8*)s)[0] ) ? \
- ( ( ( 0xBC == ((const U8*)s)[1] ) && ( 0x6E == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ ( ( ( 0xBC == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xDF ) == 'N' ) ) ? 3 : 0 )\
: ( 0xCE == ((const U8*)s)[0] ) ? \
( ( ( ((const U8*)s)[1] & 0xFD ) == 0xAC ) ? \
( ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
@@ -350,97 +377,92 @@
: ( 0xB4 == ((const U8*)s)[1] ) ? \
( ( ( 0xD5 == ((const U8*)s)[2] ) && ( ( ( ((const U8*)s)[3] & 0xF7 ) == 0xA5 ) || ((const U8*)s)[3] == 0xAB || ((const U8*)s)[3] == 0xB6 ) ) ? 4 : 0 )\
: ( ( ( 0xBE == ((const U8*)s)[1] ) && ( 0xD5 == ((const U8*)s)[2] ) ) && ( 0xB6 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
- : 0 ) \
-: ((e)-(s) > 2) ? \
- ( ( 0x61 == ((const U8*)s)[0] ) ? \
+ : 0 )
+
+
+/*** GENERATED CODE ***/
+#define is_MULTI_CHAR_FOLD_utf8_safe_part3_(s,e) \
+( ((e)-(s) > 2) ? \
+ ( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) ? \
( ( ( 0xCA == ((const U8*)s)[1] ) && ( 0xBE == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x66 == ((const U8*)s)[0] ) ? \
- ( ( 0x66 == ((const U8*)s)[1] ) ? \
- ( ( 0x69 == ((const U8*)s)[2] || 0x6C == ((const U8*)s)[2] ) ? 3 : 2 )\
- : ( 0x69 == ((const U8*)s)[1] || 0x6C == ((const U8*)s)[1] ) ? 2 : 0 )\
- : ( 0x68 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ? \
+ ( ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ) ? 3 : 2 )\
+ : ( ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ) ? 2 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'H' ) ? \
( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x69 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'I' ) ? \
( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x87 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x6A == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) ? \
( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8C == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x73 == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0x73, 0x74 ) ) ? 2 : 0 ) \
- : ( 0x74 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ? \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 'S', 'T') || inRANGE_helper_(U8, ((const U8*)s)[1], 's', 't') ) ? 2\
+ : ( ( 0xC5 == ((const U8*)s)[1] ) && ( 0xBF == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) ? \
( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x88 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x77 == ((const U8*)s)[0] || 0x79 == ((const U8*)s)[0] ) ? \
+ : ( ( ( ((const U8*)s)[0] & 0xDF ) == 'W' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ) ?\
( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( ( ( 0xCA == ((const U8*)s)[0] ) && ( 0xBC == ((const U8*)s)[1] ) ) && ( 0x6E == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ : ( 0xC5 == ((const U8*)s)[0] ) ? \
+ ( ( ( 0xBF == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 'S', 'T') || inRANGE_helper_(U8, ((const U8*)s)[2], 's', 't') ) ) ? 3 : 0 )\
+ : ( ( ( 0xCA == ((const U8*)s)[0] ) && ( 0xBC == ((const U8*)s)[1] ) ) && ( ( ((const U8*)s)[2] & 0xDF ) == 'N' ) ) ? 3 : 0 )\
: ((e)-(s) > 1) ? \
- ( ( 0x66 == ((const U8*)s)[0] ) ? \
- ( ( 0x66 == ((const U8*)s)[1] || 0x69 == ((const U8*)s)[1] || 0x6C == ((const U8*)s)[1] ) ? 2 : 0 )\
- : ( ( 0x73 == ((const U8*)s)[0] ) && ( inRANGE(((const U8*)s)[1], 0x73, 0x74 ) ) ) ? 2 : 0 )\
+ ( ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ? \
+ ( ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) || ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ) ? 2 : 0 )\
+ : ( ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) && ( inRANGE_helper_(U8, ((const U8*)s)[1], 'S', 'T') || inRANGE_helper_(U8, ((const U8*)s)[1], 's', 't') ) ) ? 2 : 0 )\
: 0 )
/*** GENERATED CODE ***/
#define is_MULTI_CHAR_FOLD_utf8_safe(s,e) \
( ((e)-(s) > 5) ? \
- ( ( 0x61 == ((const U8*)s)[0] ) ? \
+ ( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) ? \
( ( ( 0xCA == ((const U8*)s)[1] ) && ( 0xBE == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x66 == ((const U8*)s)[0] ) ? \
- ( ( 0x66 == ((const U8*)s)[1] ) ? \
- ( ( 0x69 == ((const U8*)s)[2] || 0x6C == ((const U8*)s)[2] ) ? 3 : 2 )\
- : ( 0x69 == ((const U8*)s)[1] || 0x6C == ((const U8*)s)[1] ) ? 2 : 0 )\
- : ( 0x68 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ? is_MULTI_CHAR_FOLD_utf8_safe_part0_(s,e) : is_MULTI_CHAR_FOLD_utf8_safe_part1_(s,e) )\
+: ((e)-(s) > 4) ? \
+ ( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) ? \
+ ( ( ( 0xCA == ((const U8*)s)[1] ) && ( 0xBE == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ? \
+ ( ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ) ? 3 : 2 )\
+ : ( ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ) ? 2 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'H' ) ? \
( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x69 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'I' ) ? \
( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x87 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x6A == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) ? \
( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8C == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x73 == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0x73, 0x74 ) ) ? 2 : 0 ) \
- : ( 0x74 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ? \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 'S', 'T') || inRANGE_helper_(U8, ((const U8*)s)[1], 's', 't') ) ? 2\
+ : ( ( 0xC5 == ((const U8*)s)[1] ) && ( 0xBF == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) ? \
( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x88 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x77 == ((const U8*)s)[0] || 0x79 == ((const U8*)s)[0] ) ? \
+ : ( ( ( ((const U8*)s)[0] & 0xDF ) == 'W' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ) ?\
( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xC5 == ((const U8*)s)[0] ) ? \
- ( ( ( ( 0xBF == ((const U8*)s)[1] ) && ( 0xC5 == ((const U8*)s)[2] ) ) && ( 0xBF == ((const U8*)s)[3] ) ) ? 4 : 0 )\
+ ( ( 0xBF == ((const U8*)s)[1] ) ? \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 'S', 'T') || inRANGE_helper_(U8, ((const U8*)s)[2], 's', 't') ) ? 3\
+ : ( ( 0xC5 == ((const U8*)s)[2] ) && ( 0xBF == ((const U8*)s)[3] ) ) ? 4 : 0 )\
+ : 0 ) \
: ( 0xCA == ((const U8*)s)[0] ) ? \
- ( ( ( 0xBC == ((const U8*)s)[1] ) && ( 0x6E == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ ( ( ( 0xBC == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xDF ) == 'N' ) ) ? 3 : 0 )\
: ( 0xCE == ((const U8*)s)[0] ) ? \
( ( ( ((const U8*)s)[1] & 0xFD ) == 0xAC ) ? \
( ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
: ( 0xB1 == ((const U8*)s)[1] || 0xB7 == ((const U8*)s)[1] ) ? \
( ( 0xCD == ((const U8*)s)[2] ) ? \
- ( ( 0x82 == ((const U8*)s)[3] ) ? \
- ( ( ( 0xCE == ((const U8*)s)[4] ) && ( 0xB9 == ((const U8*)s)[5] ) ) ? 6 : 4 )\
- : 0 ) \
+ ( ( 0x82 == ((const U8*)s)[3] ) ? 4 : 0 ) \
: ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
- : ( 0xB9 == ((const U8*)s)[1] ) ? \
- ( ( 0xCC == ((const U8*)s)[2] ) ? \
- ( ( 0x88 == ((const U8*)s)[3] ) ? \
- ( ( 0xCC == ((const U8*)s)[4] ) ? \
- ( ( inRANGE(((const U8*)s)[5], 0x80, 0x81 ) ) ? 6 : 0 )\
- : ( ( 0xCD == ((const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
- : 0 ) \
- : ( ( 0xCD == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
- : 0 ) \
+ : ( ( ( 0xB9 == ((const U8*)s)[1] ) && ( 0xCD == ((const U8*)s)[2] ) ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
: ( 0xCF == ((const U8*)s)[0] ) ? \
( ( 0x81 == ((const U8*)s)[1] ) ? \
( ( ( 0xCC == ((const U8*)s)[2] ) && ( 0x93 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
: ( 0x85 == ((const U8*)s)[1] ) ? \
( ( 0xCC == ((const U8*)s)[2] ) ? \
- ( ( 0x88 == ((const U8*)s)[3] ) ? \
- ( ( 0xCC == ((const U8*)s)[4] ) ? \
- ( ( inRANGE(((const U8*)s)[5], 0x80, 0x81 ) ) ? 6 : 0 )\
- : ( ( 0xCD == ((const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
- : ( 0x93 == ((const U8*)s)[3] ) ? \
- ( ( 0xCC == ((const U8*)s)[4] ) ? \
- ( ( inRANGE(((const U8*)s)[5], 0x80, 0x81 ) ) ? 6 : 4 )\
- : ( ( 0xCD == ((const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 6 : 4 )\
- : 0 ) \
+ ( ( 0x93 == ((const U8*)s)[3] ) ? 4 : 0 ) \
: ( ( 0xCD == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
: ( 0x89 == ((const U8*)s)[1] ) ? \
( ( 0xCD == ((const U8*)s)[2] ) ? \
- ( ( 0x82 == ((const U8*)s)[3] ) ? \
- ( ( ( 0xCE == ((const U8*)s)[4] ) && ( 0xB9 == ((const U8*)s)[5] ) ) ? 6 : 4 )\
- : 0 ) \
+ ( ( 0x82 == ((const U8*)s)[3] ) ? 4 : 0 ) \
: ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
: ( ( ( 0x8E == ((const U8*)s)[1] ) && ( 0xCE == ((const U8*)s)[2] ) ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
: ( 0xD5 == ((const U8*)s)[0] ) ? \
@@ -454,72 +476,524 @@
( ( ( ( ( ((const U8*)s)[2] & 0xD8 ) == 0x80 ) && ( 0xCE == ((const U8*)s)[3] ) ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
: ( ( ( ( 0xBD == ((const U8*)s)[1] ) && ( ( ( ((const U8*)s)[2] & 0xF8 ) == 0xA0 ) || ( ( ((const U8*)s)[2] & 0xFB ) == 0xB0 ) || ((const U8*)s)[2] == 0xBC ) ) && ( 0xCE == ((const U8*)s)[3] ) ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
: 0 ) \
-: ((e)-(s) > 4) ? is_MULTI_CHAR_FOLD_utf8_safe_part0(s,e) : is_MULTI_CHAR_FOLD_utf8_safe_part1(s,e) )
+: ((e)-(s) > 3) ? is_MULTI_CHAR_FOLD_utf8_safe_part2_(s,e) : is_MULTI_CHAR_FOLD_utf8_safe_part3_(s,e) )
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part0_(s,e) \
+( ( 0x81 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[2] ) && ( 0x93 == ((const U8*)s)[3] ) ) ? 0x1FE4 : 0 )\
+ : ( 0x85 == ((const U8*)s)[1] ) ? \
+ ( ( 0xCC == ((const U8*)s)[2] ) ? \
+ ( ( 0x88 == ((const U8*)s)[3] ) ? \
+ ( ( 0xCC == ((const U8*)s)[4] ) ? \
+ ( ( 0x80 == ((const U8*)s)[5] ) ? 0x1FE2 \
+ : ( 0x81 == ((const U8*)s)[5] ) ? 0x3B0 : 0 ) \
+ : ( ( 0xCD == ((const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 0x1FE7 : 0 )\
+ : ( 0x93 == ((const U8*)s)[3] ) ? \
+ ( ( 0xCC == ((const U8*)s)[4] ) ? \
+ ( ( 0x80 == ((const U8*)s)[5] ) ? 0x1F52 \
+ : ( 0x81 == ((const U8*)s)[5] ) ? 0x1F54 : 0x1F50 ) \
+ : ( ( 0xCD == ((const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 0x1F56 : 0x1F50 )\
+ : 0 ) \
+ : ( ( 0xCD == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 0x1FE6 : 0 )\
+ : ( 0x89 == ((const U8*)s)[1] ) ? \
+ ( ( 0xCD == ((const U8*)s)[2] ) ? \
+ ( ( 0x82 == ((const U8*)s)[3] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[4] ) && ( 0xB9 == ((const U8*)s)[5] ) ) ? 0x1FF7 : 0x1FF6 )\
+ : 0 ) \
+ : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FF3 : 0 )\
+ : ( ( ( 0x8E == ((const U8*)s)[1] ) && ( 0xCE == ((const U8*)s)[2] ) ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FF4 : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part1_(s,e) \
+( ( 0xD5 == ((const U8*)s)[0] ) ? \
+ ( ( 0xA5 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xD6 == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 0x587 : 0 )\
+ : ( 0xB4 == ((const U8*)s)[1] ) ? \
+ ( ( 0xD5 == ((const U8*)s)[2] ) ? \
+ ( ( 0xA5 == ((const U8*)s)[3] ) ? 0xFB14 \
+ : ( 0xAB == ((const U8*)s)[3] ) ? 0xFB15 \
+ : ( 0xAD == ((const U8*)s)[3] ) ? 0xFB17 \
+ : ( 0xB6 == ((const U8*)s)[3] ) ? 0xFB13 : 0 ) \
+ : 0 ) \
+ : ( ( ( 0xBE == ((const U8*)s)[1] ) && ( 0xD5 == ((const U8*)s)[2] ) ) && ( 0xB6 == ((const U8*)s)[3] ) ) ? 0xFB16 : 0 )\
+ : ( 0xE1 == ((const U8*)s)[0] ) ? \
+ ( ( 0xBC == ((const U8*)s)[1] ) ? \
+ ( ( 0x80 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F80 : 0 )\
+ : ( 0x81 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F81 : 0 )\
+ : ( 0x82 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F82 : 0 )\
+ : ( 0x83 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F83 : 0 )\
+ : ( 0x84 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F84 : 0 )\
+ : ( 0x85 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F85 : 0 )\
+ : ( 0x86 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F86 : 0 )\
+ : ( 0x87 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F87 : 0 )\
+ : ( 0xA0 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F90 : 0 )\
+ : ( 0xA1 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F91 : 0 )\
+ : ( 0xA2 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F92 : 0 )\
+ : ( 0xA3 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F93 : 0 )\
+ : ( 0xA4 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F94 : 0 )\
+ : ( 0xA5 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F95 : 0 )\
+ : ( 0xA6 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F96 : 0 )\
+ : ( ( ( 0xA7 == ((const U8*)s)[2] ) && ( 0xCE == ((const U8*)s)[3] ) ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F97 : 0 )\
+ : ( 0xBD == ((const U8*)s)[1] ) ? \
+ ( ( 0xA0 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA0 : 0 )\
+ : ( 0xA1 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA1 : 0 )\
+ : ( 0xA2 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA2 : 0 )\
+ : ( 0xA3 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA3 : 0 )\
+ : ( 0xA4 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA4 : 0 )\
+ : ( 0xA5 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA5 : 0 )\
+ : ( 0xA6 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA6 : 0 )\
+ : ( 0xA7 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA7 : 0 )\
+ : ( 0xB0 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FB2 : 0 )\
+ : ( 0xB4 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FC2 : 0 )\
+ : ( ( ( 0xBC == ((const U8*)s)[2] ) && ( 0xCE == ((const U8*)s)[3] ) ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FF2 : 0 )\
+ : 0 ) \
+ : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part2_(s,e) \
+( ( 0x81 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[2] ) && ( 0x93 == ((const U8*)s)[3] ) ) ? 0x1FE4 : 0 )\
+ : ( 0x85 == ((const U8*)s)[1] ) ? \
+ ( ( 0xCC == ((const U8*)s)[2] ) ? \
+ ( ( 0x93 == ((const U8*)s)[3] ) ? 0x1F50 : 0 ) \
+ : ( ( 0xCD == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 0x1FE6 : 0 )\
+ : ( 0x89 == ((const U8*)s)[1] ) ? \
+ ( ( 0xCD == ((const U8*)s)[2] ) ? \
+ ( ( 0x82 == ((const U8*)s)[3] ) ? 0x1FF6 : 0 ) \
+ : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FF3 : 0 )\
+ : ( ( ( 0x8E == ((const U8*)s)[1] ) && ( 0xCE == ((const U8*)s)[2] ) ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FF4 : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part3_(s,e) \
+( ( 0xD5 == ((const U8*)s)[0] ) ? \
+ ( ( 0xA5 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xD6 == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 0x587 : 0 )\
+ : ( 0xB4 == ((const U8*)s)[1] ) ? \
+ ( ( 0xD5 == ((const U8*)s)[2] ) ? \
+ ( ( 0xA5 == ((const U8*)s)[3] ) ? 0xFB14 \
+ : ( 0xAB == ((const U8*)s)[3] ) ? 0xFB15 \
+ : ( 0xAD == ((const U8*)s)[3] ) ? 0xFB17 \
+ : ( 0xB6 == ((const U8*)s)[3] ) ? 0xFB13 : 0 ) \
+ : 0 ) \
+ : ( ( ( 0xBE == ((const U8*)s)[1] ) && ( 0xD5 == ((const U8*)s)[2] ) ) && ( 0xB6 == ((const U8*)s)[3] ) ) ? 0xFB16 : 0 )\
+ : ( 0xE1 == ((const U8*)s)[0] ) ? \
+ ( ( 0xBC == ((const U8*)s)[1] ) ? \
+ ( ( 0x80 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F80 : 0 )\
+ : ( 0x81 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F81 : 0 )\
+ : ( 0x82 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F82 : 0 )\
+ : ( 0x83 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F83 : 0 )\
+ : ( 0x84 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F84 : 0 )\
+ : ( 0x85 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F85 : 0 )\
+ : ( 0x86 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F86 : 0 )\
+ : ( 0x87 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F87 : 0 )\
+ : ( 0xA0 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F90 : 0 )\
+ : ( 0xA1 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F91 : 0 )\
+ : ( 0xA2 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F92 : 0 )\
+ : ( 0xA3 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F93 : 0 )\
+ : ( 0xA4 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F94 : 0 )\
+ : ( 0xA5 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F95 : 0 )\
+ : ( 0xA6 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F96 : 0 )\
+ : ( ( ( 0xA7 == ((const U8*)s)[2] ) && ( 0xCE == ((const U8*)s)[3] ) ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F97 : 0 )\
+ : ( 0xBD == ((const U8*)s)[1] ) ? \
+ ( ( 0xA0 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA0 : 0 )\
+ : ( 0xA1 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA1 : 0 )\
+ : ( 0xA2 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA2 : 0 )\
+ : ( 0xA3 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA3 : 0 )\
+ : ( 0xA4 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA4 : 0 )\
+ : ( 0xA5 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA5 : 0 )\
+ : ( 0xA6 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA6 : 0 )\
+ : ( 0xA7 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA7 : 0 )\
+ : ( 0xB0 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FB2 : 0 )\
+ : ( 0xB4 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FC2 : 0 )\
+ : ( ( ( 0xBC == ((const U8*)s)[2] ) && ( 0xCE == ((const U8*)s)[3] ) ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FF2 : 0 )\
+ : 0 ) \
+ : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part4_(s,e) \
+( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) ? \
+ ( ( ( 0xCA == ((const U8*)s)[1] ) && ( 0xBE == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ? \
+ ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) ? 0xFB03 \
+ : ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ? 0xFB04 : 0xFB00 ) \
+ : ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) ? 0xFB01 \
+ : ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ? 0xFB02 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'H' ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'I' ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x87 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8C == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xDF ) == 'S' ) ? 0xDF \
+ : ( ( ((const U8*)s)[1] & 0xDF ) == 'T' ) ? 0xFB05 \
+ : ( ( 0xC5 == ((const U8*)s)[1] ) && ( 0xBF == ((const U8*)s)[2] ) ) ? 0xDF : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x88 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'W' ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+ : ( 0xC5 == ((const U8*)s)[0] ) ? \
+ ( ( 0xBF == ((const U8*)s)[1] ) ? \
+ ( ( ( ((const U8*)s)[2] & 0xDF ) == 'S' ) ? 0xDF \
+ : ( ( ((const U8*)s)[2] & 0xDF ) == 'T' ) ? 0xFB05 \
+ : ( ( 0xC5 == ((const U8*)s)[2] ) && ( 0xBF == ((const U8*)s)[3] ) ) ? 0xDF : 0 )\
+ : 0 ) \
+ : ( 0xCA == ((const U8*)s)[0] ) ? \
+ ( ( ( 0xBC == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xDF ) == 'N' ) ) ? 0x149 : 0 )\
+ : ( 0xCE == ((const U8*)s)[0] ) ? \
+ ( ( 0xAC == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FB4 : 0 )\
+ : ( 0xAE == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FC4 : 0 )\
+ : ( 0xB1 == ((const U8*)s)[1] ) ? \
+ ( ( 0xCD == ((const U8*)s)[2] ) ? \
+ ( ( 0x82 == ((const U8*)s)[3] ) ? 0x1FB6 : 0 ) \
+ : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FB3 : 0 )\
+ : ( 0xB7 == ((const U8*)s)[1] ) ? \
+ ( ( 0xCD == ((const U8*)s)[2] ) ? \
+ ( ( 0x82 == ((const U8*)s)[3] ) ? 0x1FC6 : 0 ) \
+ : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FC3 : 0 )\
+ : ( ( ( 0xB9 == ((const U8*)s)[1] ) && ( 0xCD == ((const U8*)s)[2] ) ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 0x1FD6 : 0 )\
+ : ( 0xCF == ((const U8*)s)[0] ) ? \
+ ( ( 0x81 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[2] ) && ( 0x93 == ((const U8*)s)[3] ) ) ? 0x1FE4 : 0 )\
+ : ( 0x85 == ((const U8*)s)[1] ) ? \
+ ( ( 0xCC == ((const U8*)s)[2] ) ? \
+ ( ( 0x93 == ((const U8*)s)[3] ) ? 0x1F50 : 0 ) \
+ : ( ( 0xCD == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 0x1FE6 : 0 )\
+ : ( 0x89 == ((const U8*)s)[1] ) ? \
+ ( ( 0xCD == ((const U8*)s)[2] ) ? \
+ ( ( 0x82 == ((const U8*)s)[3] ) ? 0x1FF6 : 0 ) \
+ : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FF3 : 0 )\
+ : ( ( ( 0x8E == ((const U8*)s)[1] ) && ( 0xCE == ((const U8*)s)[2] ) ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FF4 : 0 )\
+ : ( 0xD5 == ((const U8*)s)[0] ) ? \
+ ( ( 0xA5 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xD6 == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 0x587 : 0 )\
+ : ( 0xB4 == ((const U8*)s)[1] ) ? \
+ ( ( 0xD5 == ((const U8*)s)[2] ) ? \
+ ( ( 0xA5 == ((const U8*)s)[3] ) ? 0xFB14 \
+ : ( 0xAB == ((const U8*)s)[3] ) ? 0xFB15 \
+ : ( 0xAD == ((const U8*)s)[3] ) ? 0xFB17 \
+ : ( 0xB6 == ((const U8*)s)[3] ) ? 0xFB13 : 0 ) \
+ : 0 ) \
+ : ( ( ( 0xBE == ((const U8*)s)[1] ) && ( 0xD5 == ((const U8*)s)[2] ) ) && ( 0xB6 == ((const U8*)s)[3] ) ) ? 0xFB16 : 0 )\
+ : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part5_(s,e) \
+( ((e)-(s) > 2) ? \
+ ( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) ? \
+ ( ( ( 0xCA == ((const U8*)s)[1] ) && ( 0xBE == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ? \
+ ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) ? 0xFB03 \
+ : ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ? 0xFB04 : 0xFB00 ) \
+ : ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) ? 0xFB01 \
+ : ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ? 0xFB02 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'H' ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'I' ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x87 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8C == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xDF ) == 'S' ) ? 0xDF \
+ : ( ( ((const U8*)s)[1] & 0xDF ) == 'T' ) ? 0xFB05 \
+ : ( ( 0xC5 == ((const U8*)s)[1] ) && ( 0xBF == ((const U8*)s)[2] ) ) ? 0xDF : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x88 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'W' ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+ : ( 0xC5 == ((const U8*)s)[0] ) ? \
+ ( ( 0xBF == ((const U8*)s)[1] ) ? \
+ ( ( ( ((const U8*)s)[2] & 0xDF ) == 'S' ) ? 0xDF \
+ : ( ( ((const U8*)s)[2] & 0xDF ) == 'T' ) ? 0xFB05 : 0 ) \
+ : 0 ) \
+ : ( ( ( 0xCA == ((const U8*)s)[0] ) && ( 0xBC == ((const U8*)s)[1] ) ) && ( ( ((const U8*)s)[2] & 0xDF ) == 'N' ) ) ? 0x149 : 0 )\
+: ((e)-(s) > 1) ? \
+ ( ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ? 0xFB00 \
+ : ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) ? 0xFB01 \
+ : ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ? 0xFB02 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xDF ) == 'S' ) ? 0xDF \
+ : ( ( ((const U8*)s)[1] & 0xDF ) == 'T' ) ? 0xFB05 : 0 ) \
+ : 0 ) \
+: 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part6_(s,e) \
+( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) ? \
+ ( ( ( 0xCA == ((const U8*)s)[1] ) && ( 0xBE == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ? \
+ ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) ? 0xFB03 \
+ : ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ? 0xFB04 : 0xFB00 ) \
+ : ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) ? 0xFB01 \
+ : ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ? 0xFB02 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'H' ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'I' ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x87 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8C == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xDF ) == 'S' ) ? 0xDF \
+ : ( ( ((const U8*)s)[1] & 0xDF ) == 'T' ) ? 0xFB05 \
+ : ( ( 0xC5 == ((const U8*)s)[1] ) && ( 0xBF == ((const U8*)s)[2] ) ) ? 0xDF : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x88 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'W' ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+ : ( 0xC5 == ((const U8*)s)[0] ) ? \
+ ( ( 0xBF == ((const U8*)s)[1] ) ? \
+ ( ( ( ((const U8*)s)[2] & 0xDF ) == 'S' ) ? 0xDF \
+ : ( ( ((const U8*)s)[2] & 0xDF ) == 'T' ) ? 0xFB05 \
+ : ( ( 0xC5 == ((const U8*)s)[2] ) && ( 0xBF == ((const U8*)s)[3] ) ) ? 0xDF : 0 )\
+ : 0 ) \
+ : ( 0xCA == ((const U8*)s)[0] ) ? \
+ ( ( ( 0xBC == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xDF ) == 'N' ) ) ? 0x149 : 0 )\
+ : ( 0xCE == ((const U8*)s)[0] ) ? \
+ ( ( 0xAC == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FB4 : 0 )\
+ : ( 0xAE == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FC4 : 0 )\
+ : ( 0xB1 == ((const U8*)s)[1] ) ? \
+ ( ( 0xCD == ((const U8*)s)[2] ) ? \
+ ( ( 0x82 == ((const U8*)s)[3] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[4] ) && ( 0xB9 == ((const U8*)s)[5] ) ) ? 0x1FB7 : 0x1FB6 )\
+ : 0 ) \
+ : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FB3 : 0 )\
+ : ( 0xB7 == ((const U8*)s)[1] ) ? \
+ ( ( 0xCD == ((const U8*)s)[2] ) ? \
+ ( ( 0x82 == ((const U8*)s)[3] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[4] ) && ( 0xB9 == ((const U8*)s)[5] ) ) ? 0x1FC7 : 0x1FC6 )\
+ : 0 ) \
+ : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FC3 : 0 )\
+ : ( 0xB9 == ((const U8*)s)[1] ) ? \
+ ( ( 0xCC == ((const U8*)s)[2] ) ? \
+ ( ( 0x88 == ((const U8*)s)[3] ) ? \
+ ( ( 0xCC == ((const U8*)s)[4] ) ? \
+ ( ( 0x80 == ((const U8*)s)[5] ) ? 0x1FD2 \
+ : ( 0x81 == ((const U8*)s)[5] ) ? 0x390 : 0 ) \
+ : ( ( 0xCD == ((const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 0x1FD7 : 0 )\
+ : 0 ) \
+ : ( ( 0xCD == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 0x1FD6 : 0 )\
+ : 0 ) \
+ : ( 0xCF == ((const U8*)s)[0] ) ? what_MULTI_CHAR_FOLD_utf8_safe_part0_(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part1_(s,e) )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part7_(s,e) \
+( ((e)-(s) > 4) ? \
+ ( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) ? \
+ ( ( ( 0xCA == ((const U8*)s)[1] ) && ( 0xBE == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ? \
+ ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) ? 0xFB03 \
+ : ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ? 0xFB04 : 0xFB00 ) \
+ : ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) ? 0xFB01 \
+ : ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ? 0xFB02 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'H' ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'I' ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x87 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8C == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xDF ) == 'S' ) ? 0xDF \
+ : ( ( ((const U8*)s)[1] & 0xDF ) == 'T' ) ? 0xFB05 \
+ : ( ( 0xC5 == ((const U8*)s)[1] ) && ( 0xBF == ((const U8*)s)[2] ) ) ? 0xDF : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x88 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'W' ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+ : ( 0xC5 == ((const U8*)s)[0] ) ? \
+ ( ( 0xBF == ((const U8*)s)[1] ) ? \
+ ( ( ( ((const U8*)s)[2] & 0xDF ) == 'S' ) ? 0xDF \
+ : ( ( ((const U8*)s)[2] & 0xDF ) == 'T' ) ? 0xFB05 \
+ : ( ( 0xC5 == ((const U8*)s)[2] ) && ( 0xBF == ((const U8*)s)[3] ) ) ? 0xDF : 0 )\
+ : 0 ) \
+ : ( 0xCA == ((const U8*)s)[0] ) ? \
+ ( ( ( 0xBC == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xDF ) == 'N' ) ) ? 0x149 : 0 )\
+ : ( 0xCE == ((const U8*)s)[0] ) ? \
+ ( ( 0xAC == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FB4 : 0 )\
+ : ( 0xAE == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FC4 : 0 )\
+ : ( 0xB1 == ((const U8*)s)[1] ) ? \
+ ( ( 0xCD == ((const U8*)s)[2] ) ? \
+ ( ( 0x82 == ((const U8*)s)[3] ) ? 0x1FB6 : 0 ) \
+ : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FB3 : 0 )\
+ : ( 0xB7 == ((const U8*)s)[1] ) ? \
+ ( ( 0xCD == ((const U8*)s)[2] ) ? \
+ ( ( 0x82 == ((const U8*)s)[3] ) ? 0x1FC6 : 0 ) \
+ : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FC3 : 0 )\
+ : ( ( ( 0xB9 == ((const U8*)s)[1] ) && ( 0xCD == ((const U8*)s)[2] ) ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 0x1FD6 : 0 )\
+ : ( 0xCF == ((const U8*)s)[0] ) ? what_MULTI_CHAR_FOLD_utf8_safe_part2_(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part3_(s,e) )\
+: ((e)-(s) > 3) ? what_MULTI_CHAR_FOLD_utf8_safe_part4_(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part5_(s,e) )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe(s,e) \
+( ((e)-(s) > 5) ? what_MULTI_CHAR_FOLD_utf8_safe_part6_(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part7_(s,e) )
/*
MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
- &regcharclass_multi_char_folds::multi_char_folds('l', 'a')
+ %regcharclass_multi_char_folds::multi_char_folds('l', 'a')
*/
/*** GENERATED CODE ***/
#define is_MULTI_CHAR_FOLD_latin1_safe(s,e) \
( ((e)-(s) > 2) ? \
- ( ( ( ((const U8*)s)[0] & 0xDF ) == 0x46 ) ? \
- ( ( ( ((const U8*)s)[1] & 0xDF ) == 0x46 ) ? \
- ( ( ( ( ((const U8*)s)[2] & 0xDF ) == 0x49 ) || ( ( ((const U8*)s)[2] & 0xDF ) == 0x4C ) ) ? 3 : 2 )\
- : ( ( ( ((const U8*)s)[1] & 0xDF ) == 0x49 ) || ( ( ((const U8*)s)[1] & 0xDF ) == 0x4C ) ) ? 2 : 0 )\
- : ( ( ( ((const U8*)s)[0] & 0xDF ) == 0x53 ) && ( inRANGE(((const U8*)s)[1], 0x53, 0x54 ) || inRANGE(((const U8*)s)[1], 0x73, 0x74 ) ) ) ? 2 : 0 )\
+ ( ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ? \
+ ( ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ) ? 3 : 2 )\
+ : ( ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ) ? 2 : 0 )\
+ : ( ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) && ( inRANGE_helper_(U8, ((const U8*)s)[1], 'S', 'T') || inRANGE_helper_(U8, ((const U8*)s)[1], 's', 't') ) ) ? 2 : 0 )\
: ((e)-(s) > 1) ? \
- ( ( ( ((const U8*)s)[0] & 0xDF ) == 0x46 ) ? \
- ( ( ( ( ((const U8*)s)[1] & 0xDF ) == 0x46 ) || ( ( ((const U8*)s)[1] & 0xDF ) == 0x49 ) || ( ( ((const U8*)s)[1] & 0xDF ) == 0x4C ) ) ? 2 : 0 )\
- : ( ( ( ((const U8*)s)[0] & 0xDF ) == 0x53 ) && ( inRANGE(((const U8*)s)[1], 0x53, 0x54 ) || inRANGE(((const U8*)s)[1], 0x73, 0x74 ) ) ) ? 2 : 0 )\
+ ( ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ? \
+ ( ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) || ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ) ? 2 : 0 )\
+ : ( ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) && ( inRANGE_helper_(U8, ((const U8*)s)[1], 'S', 'T') || inRANGE_helper_(U8, ((const U8*)s)[1], 's', 't') ) ) ? 2 : 0 )\
+: 0 )
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_latin1_safe(s,e) \
+( ((e)-(s) > 2) ? \
+ ( ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ? \
+ ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) ? 0xFB03 \
+ : ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ? 0xFB04 : 0xFB00 ) \
+ : ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) ? 0xFB01 \
+ : ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ? 0xFB02 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xDF ) == 'S' ) ? 0xDF \
+ : ( ( ((const U8*)s)[1] & 0xDF ) == 'T' ) ? 0xFB05 : 0 ) \
+ : 0 ) \
+: ((e)-(s) > 1) ? \
+ ( ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ? 0xFB00 \
+ : ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) ? 0xFB01 \
+ : ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ? 0xFB02 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xDF ) == 'S' ) ? 0xDF \
+ : ( ( ((const U8*)s)[1] & 0xDF ) == 'T' ) ? 0xFB05 : 0 ) \
+ : 0 ) \
: 0 )
/*
THREE_CHAR_FOLD: A three-character multi-char fold
- &regcharclass_multi_char_folds::multi_char_folds('u', '3')
+ %regcharclass_multi_char_folds::multi_char_folds('u', '3')
*/
/*** GENERATED CODE ***/
#define is_THREE_CHAR_FOLD_utf8_safe(s,e) \
( ((e)-(s) > 5) ? \
- ( ( 0x66 == ((const U8*)s)[0] ) ? \
- ( ( ( 0x66 == ((const U8*)s)[1] ) && ( 0x69 == ((const U8*)s)[2] || 0x6C == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ ( ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ? \
+ ( ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) && ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ) ) ? 3 : 0 )\
: ( 0xCE == ((const U8*)s)[0] ) ? \
( ( 0xB1 == ((const U8*)s)[1] || 0xB7 == ((const U8*)s)[1] ) ? \
( ( ( ( ( 0xCD == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) && ( 0xCE == ((const U8*)s)[4] ) ) && ( 0xB9 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
: ( ( ( 0xB9 == ((const U8*)s)[1] ) && ( 0xCC == ((const U8*)s)[2] ) ) && ( 0x88 == ((const U8*)s)[3] ) ) ? ( ( 0xCC == ((const U8*)s)[4] ) ?\
- ( ( inRANGE(((const U8*)s)[5], 0x80, 0x81 ) ) ? 6 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x80, 0x81) ) ? 6 : 0 )\
: ( ( 0xCD == ((const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 6 : 0 ) : 0 )\
: ( 0xCF == ((const U8*)s)[0] ) ? \
( ( 0x85 == ((const U8*)s)[1] ) ? \
( ( ( 0xCC == ((const U8*)s)[2] ) && ( 0x88 == ((const U8*)s)[3] || 0x93 == ((const U8*)s)[3] ) ) ? ( ( 0xCC == ((const U8*)s)[4] ) ?\
- ( ( inRANGE(((const U8*)s)[5], 0x80, 0x81 ) ) ? 6 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x80, 0x81) ) ? 6 : 0 )\
: ( ( 0xCD == ((const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 6 : 0 ) : 0 )\
: ( ( ( ( ( 0x89 == ((const U8*)s)[1] ) && ( 0xCD == ((const U8*)s)[2] ) ) && ( 0x82 == ((const U8*)s)[3] ) ) && ( 0xCE == ((const U8*)s)[4] ) ) && ( 0xB9 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
: 0 ) \
-: ( ( ( ((e)-(s) > 2) && ( 0x66 == ((const U8*)s)[0] ) ) && ( 0x66 == ((const U8*)s)[1] ) ) && ( 0x69 == ((const U8*)s)[2] || 0x6C == ((const U8*)s)[2] ) ) ? 3 : 0 )
+: ( ( ( ((e)-(s) > 2) && ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ) && ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ) && ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ) ) ? 3 : 0 )
/*
THREE_CHAR_FOLD: A three-character multi-char fold
- &regcharclass_multi_char_folds::multi_char_folds('l', '3')
+ %regcharclass_multi_char_folds::multi_char_folds('l', '3')
*/
/*** GENERATED CODE ***/
#define is_THREE_CHAR_FOLD_latin1_safe(s,e) \
-( ( ( ( ( ((e) - (s)) >= 3 ) && ( ( ((const U8*)s)[0] & 0xDF ) == 0x46 ) ) && ( ( ((const U8*)s)[1] & 0xDF ) == 0x46 ) ) && ( ( ( ((const U8*)s)[2] & 0xDF ) == 0x49 ) || ( ( ((const U8*)s)[2] & 0xDF ) == 0x4C ) ) ) ? 3 : 0 )
+( ( ( ( ( ((e) - (s)) >= 3 ) && ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ) && ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ) && ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ) ) ? 3 : 0 )
/*
THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
- &regcharclass_multi_char_folds::multi_char_folds('u', 'h')
+ %regcharclass_multi_char_folds::multi_char_folds('u', 'h')
*/
/*** GENERATED CODE ***/
#define is_THREE_CHAR_FOLD_HEAD_utf8_safe(s,e) \
( ((e)-(s) > 3) ? \
- ( ( 0x61 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0x68, 0x6A ) || inRANGE(((const U8*)s)[0], 0x73, 0x74 ) || 0x77 == ((const U8*)s)[0] || 0x79 == ((const U8*)s)[0] ) ? 1\
- : ( 0x66 == ((const U8*)s)[0] ) ? \
- ( ( 0x66 == ((const U8*)s)[1] ) ? 2 : 1 ) \
+ ( ( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) || ( ( ((const U8*)s)[0] & 0xDE ) == 'H' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) || ( ( ((const U8*)s)[0] & 0xDB ) == 'S' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ) ? 1\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ? 2 : 1 ) \
+ : ( 0xC5 == ((const U8*)s)[0] ) ? \
+ ( ( 0xBF == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xCA == ((const U8*)s)[0] ) ? \
( ( 0xBC == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xCE == ((const U8*)s)[0] ) ? \
@@ -544,9 +1018,11 @@
: ( ( 0xBD == ((const U8*)s)[1] ) && ( ( ( ((const U8*)s)[2] & 0xF8 ) == 0xA0 ) || ( ( ((const U8*)s)[2] & 0xFB ) == 0xB0 ) || ((const U8*)s)[2] == 0xBC ) ) ? 3 : 0 )\
: 0 ) \
: ((e)-(s) > 2) ? \
- ( ( 0x61 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0x68, 0x6A ) || inRANGE(((const U8*)s)[0], 0x73, 0x74 ) || 0x77 == ((const U8*)s)[0] || 0x79 == ((const U8*)s)[0] ) ? 1\
- : ( 0x66 == ((const U8*)s)[0] ) ? \
- ( ( 0x66 == ((const U8*)s)[1] ) ? 2 : 1 ) \
+ ( ( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) || ( ( ((const U8*)s)[0] & 0xDE ) == 'H' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) || ( ( ((const U8*)s)[0] & 0xDB ) == 'S' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ) ? 1\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ? 2 : 1 ) \
+ : ( 0xC5 == ((const U8*)s)[0] ) ? \
+ ( ( 0xBF == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xCA == ((const U8*)s)[0] ) ? \
( ( 0xBC == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xCE == ((const U8*)s)[0] ) ? \
@@ -561,9 +1037,11 @@
: ( ( 0xBD == ((const U8*)s)[1] ) && ( ( ( ((const U8*)s)[2] & 0xF8 ) == 0xA0 ) || ( ( ((const U8*)s)[2] & 0xFB ) == 0xB0 ) || ((const U8*)s)[2] == 0xBC ) ) ? 3 : 0 )\
: 0 ) \
: ((e)-(s) > 1) ? \
- ( ( 0x61 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0x68, 0x6A ) || inRANGE(((const U8*)s)[0], 0x73, 0x74 ) || 0x77 == ((const U8*)s)[0] || 0x79 == ((const U8*)s)[0] ) ? 1\
- : ( 0x66 == ((const U8*)s)[0] ) ? \
- ( ( 0x66 == ((const U8*)s)[1] ) ? 2 : 1 ) \
+ ( ( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) || ( ( ((const U8*)s)[0] & 0xDE ) == 'H' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) || ( ( ((const U8*)s)[0] & 0xDB ) == 'S' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ) ? 1\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ? 2 : 1 ) \
+ : ( 0xC5 == ((const U8*)s)[0] ) ? \
+ ( ( 0xBF == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xCA == ((const U8*)s)[0] ) ? \
( ( 0xBC == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xCE == ((const U8*)s)[0] ) ? \
@@ -572,23 +1050,23 @@
( ( ( ( ((const U8*)s)[1] & 0xFB ) == 0x81 ) || ((const U8*)s)[1] == 0x89 || ((const U8*)s)[1] == 0x8E ) ? 2 : 0 )\
: ( ( 0xD5 == ((const U8*)s)[0] ) && ( 0xA5 == ((const U8*)s)[1] || 0xB4 == ((const U8*)s)[1] || 0xBE == ((const U8*)s)[1] ) ) ? 2 : 0 )\
: ((e)-(s) > 0) ? \
- ( 0x61 == ((const U8*)s)[0] || 0x66 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0x68, 0x6A ) || inRANGE(((const U8*)s)[0], 0x73, 0x74 ) || 0x77 == ((const U8*)s)[0] || 0x79 == ((const U8*)s)[0] )\
+ ( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) || ( ( ((const U8*)s)[0] & 0xDE ) == 'H' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) || ( ( ((const U8*)s)[0] & 0xDB ) == 'S' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) )\
: 0 )
/*
THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
- &regcharclass_multi_char_folds::multi_char_folds('l', 'h')
+ %regcharclass_multi_char_folds::multi_char_folds('l', 'h')
*/
/*** GENERATED CODE ***/
#define is_THREE_CHAR_FOLD_HEAD_latin1_safe(s,e) \
( ((e)-(s) > 1) ? \
- ( ( ( ( ((const U8*)s)[0] & 0xDF ) == 0x41 ) || ( ( ((const U8*)s)[0] & 0xDE ) == 0x48 ) || ( ( ((const U8*)s)[0] & 0xDF ) == 0x4A ) || ( ( ((const U8*)s)[0] & 0xDB ) == 0x53 ) || ( ( ((const U8*)s)[0] & 0xDF ) == 0x54 ) || ( ( ((const U8*)s)[0] & 0xDF ) == 0x59 ) ) ? 1\
- : ( ( ((const U8*)s)[0] & 0xDF ) == 0x46 ) ? \
- ( ( ( ((const U8*)s)[1] & 0xDF ) == 0x46 ) ? 2 : 1 ) \
+ ( ( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) || ( ( ((const U8*)s)[0] & 0xDE ) == 'H' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) || ( ( ((const U8*)s)[0] & 0xDB ) == 'S' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ) ? 1\
+ : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ? 2 : 1 ) \
: 0 ) \
: ((e)-(s) > 0) ? \
- ( ( ( ((const U8*)s)[0] & 0xDF ) == 0x41 ) || ( ( ((const U8*)s)[0] & 0xDF ) == 0x46 ) || ( ( ((const U8*)s)[0] & 0xDE ) == 0x48 ) || ( ( ((const U8*)s)[0] & 0xDF ) == 0x4A ) || ( ( ((const U8*)s)[0] & 0xDB ) == 0x53 ) || ( ( ((const U8*)s)[0] & 0xDF ) == 0x54 ) || ( ( ((const U8*)s)[0] & 0xDF ) == 0x59 ) )\
+ ( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) || ( ( ((const U8*)s)[0] & 0xDE ) == 'H' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) || ( ( ((const U8*)s)[0] & 0xDB ) == 'S' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) )\
: 0 )
/*
@@ -610,13 +1088,13 @@
( ( 0x87 == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xE1 == ((const U8*)s)[0] ) ? \
( ( 0xBA == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x96, 0x9A ) || 0x9E == ((const U8*)s)[2] ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x96, 0x9A) || 0x9E == ((const U8*)s)[2] ) ? 3 : 0 )\
: ( 0xBD == ((const U8*)s)[1] ) ? \
( ( ( ((const U8*)s)[2] & 0xF9 ) == 0x90 ) ? 3 : 0 ) \
: ( 0xBE == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x80, 0xAF ) || inRANGE(((const U8*)s)[2], 0xB2, 0xB4 ) || inRANGE(((const U8*)s)[2], 0xB6, 0xB7 ) || 0xBC == ((const U8*)s)[2] ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x80, 0xAF) || inRANGE_helper_(U8, ((const U8*)s)[2], 0xB2, 0xB4) || inRANGE_helper_(U8, ((const U8*)s)[2], 0xB6, 0xB7) || 0xBC == ((const U8*)s)[2] ) ? 3 : 0 )\
: ( ( 0xBF == ((const U8*)s)[1] ) && ( ( ( ((const U8*)s)[2] & 0xCA ) == 0x82 ) || ( ( ((const U8*)s)[2] & 0xF7 ) == 0x84 ) || ((const U8*)s)[2] == 0xA4 || ( ( ((const U8*)s)[2] & 0xF7 ) == 0xB4 ) ) ) ? 3 : 0 )\
-: ( ( ( 0xEF == ((const U8*)s)[0] ) && ( 0xAC == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0x80, 0x86 ) || inRANGE(((const U8*)s)[2], 0x93, 0x97 ) ) ) ? 3 : 0 )
+: ( ( ( 0xEF == ((const U8*)s)[0] ) && ( 0xAC == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x80, 0x86) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x93, 0x97) ) ) ? 3 : 0 )
/*
PROBLEMATIC_LOCALE_FOLD: characters whose fold is problematic under locale
@@ -626,10 +1104,10 @@
/*** GENERATED CODE ***/
#define is_PROBLEMATIC_LOCALE_FOLD_utf8(s) \
( ( ((const U8*)s)[0] <= 0x7F ) ? 1 \
-: ( inRANGE(((const U8*)s)[0], 0xC2, 0xC3 ) ) ? \
+: ( inRANGE_helper_(U8, ((const U8*)s)[0], 0xC2, 0xC3) ) ? \
2 \
: ( 0xC4 == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0xB0, 0xB1 ) ) ? 2 : 0 ) \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0xB0, 0xB1) ) ? 2 : 0 ) \
: ( 0xC5 == ((const U8*)s)[0] ) ? \
( ( 0x89 == ((const U8*)s)[1] || 0xB8 == ((const U8*)s)[1] || 0xBF == ((const U8*)s)[1] ) ? 2 : 0 )\
: ( 0xC7 == ((const U8*)s)[0] ) ? \
@@ -639,16 +1117,15 @@
: ( 0xCE == ((const U8*)s)[0] ) ? \
( ( ( ((const U8*)s)[1] & 0xDF ) == 0x9C ) ? 2 : 0 ) \
: ( 0xE1 == ((const U8*)s)[0] ) ? \
- ( ( ( 0xBA == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x96, 0x9A ) || 0x9E == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ ( ( ( 0xBA == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x96, 0x9A) || 0x9E == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xE2 == ((const U8*)s)[0] ) ? \
- ( ( ( 0x84 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0xAA, 0xAB ) ) ) ? 3 : 0 )\
-: ( ( ( 0xEF == ((const U8*)s)[0] ) && ( 0xAC == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0x80, 0x86 ) ) ) ? 3 : 0 )
+ ( ( ( 0x84 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0xAA, 0xAB) ) ) ? 3 : 0 )\
+: ( ( ( 0xEF == ((const U8*)s)[0] ) && ( 0xAC == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x80, 0x86) ) ) ? 3 : 0 )
/*** GENERATED CODE ***/
#define is_PROBLEMATIC_LOCALE_FOLD_cp(cp) \
( cp <= 0xFF || ( 0xFF < cp && \
-( 0x130 == cp || ( 0x130 < cp && \
-( 0x131 == cp || ( 0x131 < cp && \
+( inRANGE_helper_(UV, cp, 0x130, 0x131) || ( 0x131 < cp && \
( 0x149 == cp || ( 0x149 < cp && \
( 0x178 == cp || ( 0x178 < cp && \
( 0x17F == cp || ( 0x17F < cp && \
@@ -656,10 +1133,9 @@
( 0x307 == cp || ( 0x307 < cp && \
( 0x39C == cp || ( 0x39C < cp && \
( 0x3BC == cp || ( 0x3BC < cp && \
-( inRANGE(cp, 0x1E96, 0x1E9A) || ( 0x1E9A < cp && \
+( inRANGE_helper_(UV, cp, 0x1E96, 0x1E9A) || ( 0x1E9A < cp && \
( 0x1E9E == cp || ( 0x1E9E < cp && \
-( 0x212A == cp || ( 0x212A < cp && \
-( 0x212B == cp || inRANGE(cp, 0xFB00, 0xFB06) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
+( inRANGE_helper_(UV, cp, 0x212A, 0x212B) || inRANGE_helper_(UV, cp, 0xFB00, 0xFB06) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
/*
PROBLEMATIC_LOCALE_FOLDEDS_START: The first folded character of folds which are problematic under locale
@@ -669,10 +1145,10 @@
/*** GENERATED CODE ***/
#define is_PROBLEMATIC_LOCALE_FOLDEDS_START_utf8(s) \
( ( ((const U8*)s)[0] <= 0x7F ) ? 1 \
-: ( inRANGE(((const U8*)s)[0], 0xC2, 0xC3 ) ) ? \
+: ( inRANGE_helper_(U8, ((const U8*)s)[0], 0xC2, 0xC3) ) ? \
2 \
: ( 0xC4 == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0xB0, 0xB1 ) ) ? 2 : 0 ) \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0xB0, 0xB1) ) ? 2 : 0 ) \
: ( 0xC5 == ((const U8*)s)[0] ) ? \
( ( 0x89 == ((const U8*)s)[1] || 0xB8 == ((const U8*)s)[1] || 0xBF == ((const U8*)s)[1] ) ? 2 : 0 )\
: ( 0xC7 == ((const U8*)s)[0] ) ? \
@@ -682,16 +1158,15 @@
: ( 0xCE == ((const U8*)s)[0] ) ? \
( ( ( ((const U8*)s)[1] & 0xDF ) == 0x9C ) ? 2 : 0 ) \
: ( 0xE1 == ((const U8*)s)[0] ) ? \
- ( ( ( 0xBA == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x96, 0x9A ) || 0x9E == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ ( ( ( 0xBA == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x96, 0x9A) || 0x9E == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xE2 == ((const U8*)s)[0] ) ? \
- ( ( ( 0x84 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0xAA, 0xAB ) ) ) ? 3 : 0 )\
-: ( ( ( 0xEF == ((const U8*)s)[0] ) && ( 0xAC == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0x80, 0x86 ) ) ) ? 3 : 0 )
+ ( ( ( 0x84 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0xAA, 0xAB) ) ) ? 3 : 0 )\
+: ( ( ( 0xEF == ((const U8*)s)[0] ) && ( 0xAC == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x80, 0x86) ) ) ? 3 : 0 )
/*** GENERATED CODE ***/
#define is_PROBLEMATIC_LOCALE_FOLDEDS_START_cp(cp) \
( cp <= 0xFF || ( 0xFF < cp && \
-( 0x130 == cp || ( 0x130 < cp && \
-( 0x131 == cp || ( 0x131 < cp && \
+( inRANGE_helper_(UV, cp, 0x130, 0x131) || ( 0x131 < cp && \
( 0x149 == cp || ( 0x149 < cp && \
( 0x178 == cp || ( 0x178 < cp && \
( 0x17F == cp || ( 0x17F < cp && \
@@ -699,10 +1174,9 @@
( 0x2BC == cp || ( 0x2BC < cp && \
( 0x39C == cp || ( 0x39C < cp && \
( 0x3BC == cp || ( 0x3BC < cp && \
-( inRANGE(cp, 0x1E96, 0x1E9A) || ( 0x1E9A < cp && \
+( inRANGE_helper_(UV, cp, 0x1E96, 0x1E9A) || ( 0x1E9A < cp && \
( 0x1E9E == cp || ( 0x1E9E < cp && \
-( 0x212A == cp || ( 0x212A < cp && \
-( 0x212B == cp || inRANGE(cp, 0xFB00, 0xFB06) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
+( inRANGE_helper_(UV, cp, 0x212A, 0x212B) || inRANGE_helper_(UV, cp, 0xFB00, 0xFB06) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
/*
PATWS: pattern white space
@@ -712,25 +1186,16 @@
/*** GENERATED CODE ***/
#define is_PATWS_safe(s,e,is_utf8) \
( ( LIKELY((e) > (s)) ) ? \
- ( ( inRANGE(((const U8*)s)[0], 0x09, 0x0D ) || 0x20 == ((const U8*)s)[0] ) ? 1\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\t', '\r') || ' ' == ((const U8*)s)[0] ) ? 1\
: (! is_utf8 ) ? \
( 0x85 == ((const U8*)s)[0] ) \
: ( LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) ? \
( ( 0xC2 == ((const U8*)s)[0] ) ? \
( ( 0x85 == ((const U8*)s)[1] ) ? 2 : 0 ) \
- : ( ( ( 0xE2 == ((const U8*)s)[0] ) && ( 0x80 == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0x8E, 0x8F ) || inRANGE(((const U8*)s)[2], 0xA8, 0xA9 ) ) ) ? 3 : 0 )\
+ : ( ( ( 0xE2 == ((const U8*)s)[0] ) && ( 0x80 == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x8E, 0x8F) || inRANGE_helper_(U8, ((const U8*)s)[2], 0xA8, 0xA9) ) ) ? 3 : 0 )\
: 0 ) \
: 0 )
-/*** GENERATED CODE ***/
-#define is_PATWS_cp(cp) \
-( inRANGE(cp, 0x09, 0x0D) || ( 0x0D < cp && \
-( 0x20 == cp || ( 0x20 < cp && \
-( 0x85 == cp || ( 0x85 < cp && \
-( 0x200E == cp || ( 0x200E < cp && \
-( 0x200F == cp || ( 0x200F < cp && \
-( 0x2028 == cp || 0x2029 == cp ) ) ) ) ) ) ) ) ) ) )
-
/*
HANGUL_ED: Hangul syllables whose first character is \xED
@@ -738,7 +1203,7 @@
*/
/*** GENERATED CODE ***/
#define is_HANGUL_ED_utf8_safe(s,e) \
-( ( ( ( ( ((e) - (s)) >= 3 ) && ( 0xED == ((const U8*)s)[0] ) ) && ( inRANGE(((const U8*)s)[1], 0x80, 0x9F ) ) ) && ( inRANGE(((const U8*)s)[2], 0x80, 0xBF ) ) ) ? 3 : 0 )
+( ( ( ( ( ((e) - (s)) >= 3 ) && ( 0xED == ((const U8*)s)[0] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x80, 0x9F) ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x80, 0xBF) ) ) ? 3 : 0 )
#endif /* ASCII/Latin1 */
@@ -755,44 +1220,44 @@
/*** GENERATED CODE ***/
#define is_LNBREAK_safe(s,e,is_utf8) \
( ((e)-(s) > 2) ? \
- ( ( inRANGE(((const U8*)s)[0], 0x0B, 0x0C ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
- : ( 0x0D == ((const U8*)s)[0] ) ? \
- ( ( 0x15 == ((const U8*)s)[1] ) ? 2 : 1 ) \
- : ( ( ( ( is_utf8 ) && ( 0xCA == ((const U8*)s)[0] ) ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0x49, 0x4A ) ) ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\f') || '\n' == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
+ : ( '\r' == ((const U8*)s)[0] ) ? \
+ ( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 ) \
+ : ( ( ( ( is_utf8 ) && ( 0xCA == ((const U8*)s)[0] ) ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x49, 0x4A) ) ) ? 3 : 0 )\
: ((e)-(s) > 1) ? \
- ( ( inRANGE(((const U8*)s)[0], 0x0B, 0x0C ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
- : ( 0x0D == ((const U8*)s)[0] ) ? \
- ( ( 0x15 == ((const U8*)s)[1] ) ? 2 : 1 ) \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\f') || '\n' == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
+ : ( '\r' == ((const U8*)s)[0] ) ? \
+ ( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 ) \
: 0 ) \
: ((e)-(s) > 0) ? \
- ( inRANGE(((const U8*)s)[0], 0x0B, 0x0D ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] )\
+ ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\r') || '\n' == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] )\
: 0 )
/*** GENERATED CODE ***/
#define is_LNBREAK_utf8_safe(s,e) \
( ((e)-(s) > 2) ? \
- ( ( inRANGE(((const U8*)s)[0], 0x0B, 0x0C ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
- : ( 0x0D == ((const U8*)s)[0] ) ? \
- ( ( 0x15 == ((const U8*)s)[1] ) ? 2 : 1 ) \
- : ( ( ( 0xCA == ((const U8*)s)[0] ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0x49, 0x4A ) ) ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\f') || '\n' == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
+ : ( '\r' == ((const U8*)s)[0] ) ? \
+ ( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 ) \
+ : ( ( ( 0xCA == ((const U8*)s)[0] ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x49, 0x4A) ) ) ? 3 : 0 )\
: ((e)-(s) > 1) ? \
- ( ( inRANGE(((const U8*)s)[0], 0x0B, 0x0C ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
- : ( 0x0D == ((const U8*)s)[0] ) ? \
- ( ( 0x15 == ((const U8*)s)[1] ) ? 2 : 1 ) \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\f') || '\n' == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
+ : ( '\r' == ((const U8*)s)[0] ) ? \
+ ( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 ) \
: 0 ) \
: ((e)-(s) > 0) ? \
- ( inRANGE(((const U8*)s)[0], 0x0B, 0x0D ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] )\
+ ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\r') || '\n' == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] )\
: 0 )
/*** GENERATED CODE ***/
#define is_LNBREAK_latin1_safe(s,e) \
( ((e)-(s) > 1) ? \
- ( ( inRANGE(((const U8*)s)[0], 0x0B, 0x0C ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
- : ( 0x0D == ((const U8*)s)[0] ) ? \
- ( ( 0x15 == ((const U8*)s)[1] ) ? 2 : 1 ) \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\f') || '\n' == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
+ : ( '\r' == ((const U8*)s)[0] ) ? \
+ ( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 ) \
: 0 ) \
: ((e)-(s) > 0) ? \
- ( inRANGE(((const U8*)s)[0], 0x0B, 0x0D ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] )\
+ ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\r') || '\n' == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] )\
: 0 )
/*
@@ -806,7 +1271,7 @@
( ( ( 0x63 == ((const U8*)s)[1] ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xCA == ((const U8*)s)[0] ) ? \
( ( 0x41 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || 0x51 == ((const U8*)s)[2] ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || 0x51 == ((const U8*)s)[2] ) ? 3 : 0 )\
: ( 0x42 == ((const U8*)s)[1] ) ? \
( ( 0x56 == ((const U8*)s)[2] ) ? 3 : 0 ) \
: ( ( 0x43 == ((const U8*)s)[1] ) && ( 0x73 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
@@ -815,7 +1280,7 @@
/*** GENERATED CODE ***/
#define is_HORIZWS_cp_high(cp) \
( 0x1680 == cp || ( 0x1680 < cp && \
-( inRANGE(cp, 0x2000, 0x200A) || ( 0x200A < cp && \
+( inRANGE_helper_(UV, cp, 0x2000, 0x200A) || ( 0x200A < cp && \
( 0x202F == cp || ( 0x202F < cp && \
( 0x205F == cp || 0x3000 == cp ) ) ) ) ) ) )
@@ -826,11 +1291,11 @@
*/
/*** GENERATED CODE ***/
#define is_VERTWS_high(s) \
-( ( ( ( 0xCA == ((const U8*)s)[0] ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0x49, 0x4A ) ) ) ? 3 : 0 )
+( ( ( ( 0xCA == ((const U8*)s)[0] ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x49, 0x4A) ) ) ? 3 : 0 )
/*** GENERATED CODE ***/
#define is_VERTWS_cp_high(cp) \
-( 0x2028 == cp || 0x2029 == cp )
+( inRANGE_helper_(UV, cp, 0x2028, 0x2029) )
/*
XDIGIT: Hexadecimal digits
@@ -840,13 +1305,13 @@
/*** GENERATED CODE ***/
#define is_XDIGIT_high(s) \
( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x73 == ((const U8*)s)[1] ) ) ? ( ( 0x67 == ((const U8*)s)[2] ) ?\
- ( ( inRANGE(((const U8*)s)[3], 0x57, 0x59 ) || inRANGE(((const U8*)s)[3], 0x62, 0x68 ) ) ? 4 : 0 )\
- : ( ( inRANGE(((const U8*)s)[2], 0x68, 0x69 ) ) && ( inRANGE(((const U8*)s)[3], 0x42, 0x47 ) ) ) ? 4 : 0 ) : 0 )
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x57, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x68) ) ? 4 : 0 )\
+ : ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x68, 0x69) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x42, 0x47) ) ) ? 4 : 0 ) : 0 )
/*** GENERATED CODE ***/
#define is_XDIGIT_cp_high(cp) \
-( inRANGE(cp, 0xFF10, 0xFF19) || ( 0xFF19 < cp && \
-( inRANGE(cp, 0xFF21, 0xFF26) || inRANGE(cp, 0xFF41, 0xFF46) ) ) )
+( inRANGE_helper_(UV, cp, 0xFF10, 0xFF19) || ( 0xFF19 < cp && \
+( inRANGE_helper_(UV, cp, 0xFF21, 0xFF26) || inRANGE_helper_(UV, cp, 0xFF41, 0xFF46) ) ) )
/*
XPERLSPACE: \p{XPerlSpace}
@@ -859,20 +1324,19 @@
( ( ( 0x63 == ((const U8*)s)[1] ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xCA == ((const U8*)s)[0] ) ? \
( ( 0x41 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || 0x51 == ((const U8*)s)[2] ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || 0x51 == ((const U8*)s)[2] ) ? 3 : 0 )\
: ( 0x42 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x49, 0x4A ) || 0x56 == ((const U8*)s)[2] ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x49, 0x4A) || 0x56 == ((const U8*)s)[2] ) ? 3 : 0 )\
: ( ( 0x43 == ((const U8*)s)[1] ) && ( 0x73 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( ( ( 0xCE == ((const U8*)s)[0] ) && ( 0x41 == ((const U8*)s)[1] ) ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )
/*** GENERATED CODE ***/
#define is_XPERLSPACE_cp_high(cp) \
( 0x1680 == cp || ( 0x1680 < cp && \
-( inRANGE(cp, 0x2000, 0x200A) || ( 0x200A < cp && \
-( 0x2028 == cp || ( 0x2028 < cp && \
-( 0x2029 == cp || ( 0x2029 < cp && \
+( inRANGE_helper_(UV, cp, 0x2000, 0x200A) || ( 0x200A < cp && \
+( inRANGE_helper_(UV, cp, 0x2028, 0x2029) || ( 0x2029 < cp && \
( 0x202F == cp || ( 0x202F < cp && \
-( 0x205F == cp || 0x3000 == cp ) ) ) ) ) ) ) ) ) ) )
+( 0x205F == cp || 0x3000 == cp ) ) ) ) ) ) ) ) )
/*
NONCHAR: Non character code points
@@ -884,16 +1348,16 @@
( ( ( LIKELY((e) > (s)) ) && ( LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) ) ? ( ( 0xDD == ((const U8*)s)[0] ) ?\
( ( 0x73 == ((const U8*)s)[1] ) ? \
( ( 0x55 == ((const U8*)s)[2] ) ? \
- ( ( inRANGE(((const U8*)s)[3], 0x57, 0x59 ) || inRANGE(((const U8*)s)[3], 0x62, 0x6A ) || inRANGE(((const U8*)s)[3], 0x70, 0x73 ) ) ? 4 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x57, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x70, 0x73) ) ? 4 : 0 )\
: ( 0x56 == ((const U8*)s)[2] ) ? \
- ( ( inRANGE(((const U8*)s)[3], 0x41, 0x4A ) || inRANGE(((const U8*)s)[3], 0x51, 0x56 ) ) ? 4 : 0 )\
- : ( ( 0x73 == ((const U8*)s)[2] ) && ( inRANGE(((const U8*)s)[3], 0x72, 0x73 ) ) ) ? 4 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x51, 0x56) ) ? 4 : 0 )\
+ : ( ( 0x73 == ((const U8*)s)[2] ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x72, 0x73) ) ) ? 4 : 0 )\
: 0 ) \
: ( 0xDF == ((const U8*)s)[0] || 0xEA == ((const U8*)s)[0] || 0xEC == ((const U8*)s)[0] ) ?\
- ( ( ( ( 0x73 == ((const U8*)s)[1] ) && ( 0x73 == ((const U8*)s)[2] ) ) && ( inRANGE(((const U8*)s)[3], 0x72, 0x73 ) ) ) ? 4 : 0 )\
+ ( ( ( ( 0x73 == ((const U8*)s)[1] ) && ( 0x73 == ((const U8*)s)[2] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x72, 0x73) ) ) ? 4 : 0 )\
: ( 0xED == ((const U8*)s)[0] ) ? \
- ( ( ( ( ( ((const U8*)s)[1] == 0x4A || ((const U8*)s)[1] == 0x52 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x54 ) || ((const U8*)s)[1] == 0x58 || ((const U8*)s)[1] == 0x62 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x64 ) || ( ( ((const U8*)s)[1] & 0xFD ) == 0x68 ) || ( ( ((const U8*)s)[1] & 0xFD ) == 0x71 ) ) && ( 0x73 == ((const U8*)s)[2] ) ) && ( 0x73 == ((const U8*)s)[3] ) ) && ( inRANGE(((const U8*)s)[4], 0x72, 0x73 ) ) ) ? 5 : 0 )\
- : ( ( ( ( ( 0xEE == ((const U8*)s)[0] ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( 0x73 == ((const U8*)s)[2] ) ) && ( 0x73 == ((const U8*)s)[3] ) ) && ( inRANGE(((const U8*)s)[4], 0x72, 0x73 ) ) ) ? 5 : 0 ) : 0 )
+ ( ( ( ( ( ((const U8*)s)[1] == 0x4A || ((const U8*)s)[1] == 0x52 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x54 ) || ((const U8*)s)[1] == 0x58 || ((const U8*)s)[1] == 0x62 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x64 ) || ( ( ((const U8*)s)[1] & 0xFD ) == 0x68 ) || ( ( ((const U8*)s)[1] & 0xFD ) == 0x71 ) ) && ( 0x73 == ((const U8*)s)[2] ) ) && ( 0x73 == ((const U8*)s)[3] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[4], 0x72, 0x73) ) ) ? 5 : 0 )\
+ : ( ( ( ( ( 0xEE == ((const U8*)s)[0] ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( 0x73 == ((const U8*)s)[2] ) ) && ( 0x73 == ((const U8*)s)[3] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[4], 0x72, 0x73) ) ) ? 5 : 0 ) : 0 )
/*
SURROGATE: Surrogate code points
@@ -902,7 +1366,7 @@
*/
/*** GENERATED CODE ***/
#define is_SURROGATE_utf8_safe(s,e) \
-( ( ( ( ( ( ((e) - (s)) >= 4 ) && ( 0xDD == ((const U8*)s)[0] ) ) && ( inRANGE(((const U8*)s)[1], 0x65, 0x66 ) ) ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x73 ) ) ) && ( inRANGE(((const U8*)s)[3], 0x41, 0x4A ) || inRANGE(((const U8*)s)[3], 0x51, 0x59 ) || inRANGE(((const U8*)s)[3], 0x62, 0x6A ) || inRANGE(((const U8*)s)[3], 0x70, 0x73 ) ) ) ? 4 : 0 )
+( ( ( ( ( ( ((e) - (s)) >= 4 ) && ( 0xDD == ((const U8*)s)[0] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x65, 0x66) ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x73) ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x70, 0x73) ) ) ? 4 : 0 )
/*
QUOTEMETA: Meta-characters that \Q should quote
@@ -910,97 +1374,105 @@
\p{_Perl_Quotemeta}
*/
/*** GENERATED CODE ***/
-#define is_QUOTEMETA_high(s) \
-( ( 0xB1 == ((const U8*)s)[0] ) ? \
- ( ( 0x56 == ((const U8*)s)[1] ) ? 2 : 0 ) \
-: ( 0xB8 == ((const U8*)s)[0] ) ? \
- ( ( ( 0x57 == ((const U8*)s)[1] ) && ( 0x70 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-: ( 0xBB == ((const U8*)s)[0] ) ? \
- ( ( 0x51 == ((const U8*)s)[1] ) ? \
- ( ( 0x73 == ((const U8*)s)[2] ) ? 3 : 0 ) \
- : ( ( 0x52 == ((const U8*)s)[1] ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-: ( 0xBC == ((const U8*)s)[0] ) ? \
- ( ( 0x63 == ((const U8*)s)[1] ) ? \
+#define is_QUOTEMETA_high_part0_(s) \
+( ( 0x63 == ((const U8*)s)[1] ) ? \
( ( 0x41 == ((const U8*)s)[2] ) ? 3 : 0 ) \
- : ( ( 0x71 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x63, 0x64 ) ) ) ? 3 : 0 )\
-: ( 0xBE == ((const U8*)s)[0] ) ? \
- ( ( ( 0x41 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x52, 0x55 ) ) ) ? 3 : 0 )\
+ : ( ( 0x71 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x63, 0x64) ) ) ? 3 : 0 )
+
+
+/*** GENERATED CODE ***/
+#define is_QUOTEMETA_high_part1_(s) \
+( ( 0xBE == ((const U8*)s)[0] ) ? \
+ ( ( ( 0x41 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x52, 0x55) ) ) ? 3 : 0 )\
: ( 0xCA == ((const U8*)s)[0] ) ? \
- ( ( 0x41 == ((const U8*)s)[1] || inRANGE(((const U8*)s)[1], 0x54, 0x59 ) || inRANGE(((const U8*)s)[1], 0x62, 0x6A ) || inRANGE(((const U8*)s)[1], 0x70, 0x73 ) ) ?\
- ( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x73 ) ) ? 3 : 0 )\
+ ( ( 0x41 == ((const U8*)s)[1] || inRANGE_helper_(U8, ((const U8*)s)[1], 0x54, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x70, 0x73) ) ?\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x73) ) ? 3 : 0 )\
: ( 0x42 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x72 ) ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x72) ) ? 3 : 0 )\
: ( 0x43 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x42, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || 0x62 == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x64, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x73 ) ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x42, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || 0x62 == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x64, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x73) ) ? 3 : 0 )\
: ( 0x44 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x56 ) ) ? 3 : 0 )\
- : ( ( 0x53 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x57, 0x59 ) || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x73 ) ) ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x56) ) ? 3 : 0 )\
+ : ( ( 0x53 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x57, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x73) ) ) ? 3 : 0 )\
: ( 0xCB == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0x41, 0x43 ) || inRANGE(((const U8*)s)[1], 0x49, 0x4A ) || inRANGE(((const U8*)s)[1], 0x51, 0x59 ) || inRANGE(((const U8*)s)[1], 0x62, 0x69 ) || inRANGE(((const U8*)s)[1], 0x71, 0x73 ) ) ?\
- ( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x73 ) ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x41, 0x43) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x49, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x62, 0x69) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x71, 0x73) ) ?\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x73) ) ? 3 : 0 )\
: ( 0x6A == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || inRANGE(((const U8*)s)[2], 0x62, 0x64 ) ) ? 3 : 0 )\
- : ( ( 0x70 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x63, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x73 ) ) ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x64) ) ? 3 : 0 )\
+ : ( ( 0x70 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x63, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x73) ) ) ? 3 : 0 )\
: ( 0xCC == ((const U8*)s)[0] ) ? \
- ( ( ( inRANGE(((const U8*)s)[1], 0x41, 0x4A ) || inRANGE(((const U8*)s)[1], 0x51, 0x59 ) || inRANGE(((const U8*)s)[1], 0x62, 0x6A ) || inRANGE(((const U8*)s)[1], 0x70, 0x73 ) ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x73 ) ) ) ? 3 : 0 )\
+ ( ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x70, 0x73) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x73) ) ) ? 3 : 0 )\
: ( 0xCD == ((const U8*)s)[0] ) ? \
- ( ( ( inRANGE(((const U8*)s)[1], 0x57, 0x59 ) || 0x62 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x73 ) ) ) ? 3 : 0 )\
+ ( ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x57, 0x59) || 0x62 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x73) ) ) ? 3 : 0 )\
: ( 0xCE == ((const U8*)s)[0] ) ? \
( ( 0x41 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x41, 0x44 ) || inRANGE(((const U8*)s)[2], 0x49, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x73 ) ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x44) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x49, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x73) ) ? 3 : 0 )\
: ( 0x42 == ((const U8*)s)[1] ) ? \
( ( 0x41 == ((const U8*)s)[2] || 0x57 == ((const U8*)s)[2] ) ? 3 : 0 )\
: ( ( 0x52 == ((const U8*)s)[1] ) && ( 0x45 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xDD == ((const U8*)s)[0] ) ? \
( ( 0x73 == ((const U8*)s)[1] ) ? \
( ( 0x4A == ((const U8*)s)[2] ) ? \
- ( ( inRANGE(((const U8*)s)[3], 0x72, 0x73 ) ) ? 4 : 0 ) \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x72, 0x73) ) ? 4 : 0 )\
: ( 0x57 == ((const U8*)s)[2] ) ? \
- ( ( inRANGE(((const U8*)s)[3], 0x41, 0x4A ) || inRANGE(((const U8*)s)[3], 0x51, 0x56 ) ) ? 4 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x51, 0x56) ) ? 4 : 0 )\
: ( 0x59 == ((const U8*)s)[2] ) ? \
- ( ( inRANGE(((const U8*)s)[3], 0x46, 0x47 ) ) ? 4 : 0 ) \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x46, 0x47) ) ? 4 : 0 )\
: ( 0x66 == ((const U8*)s)[2] ) ? \
( ( 0x73 == ((const U8*)s)[3] ) ? 4 : 0 ) \
: ( 0x71 == ((const U8*)s)[2] ) ? \
( ( 0x41 == ((const U8*)s)[3] ) ? 4 : 0 ) \
- : ( ( 0x73 == ((const U8*)s)[2] ) && ( inRANGE(((const U8*)s)[3], 0x57, 0x59 ) || inRANGE(((const U8*)s)[3], 0x62, 0x67 ) ) ) ? 4 : 0 )\
+ : ( ( 0x73 == ((const U8*)s)[2] ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x57, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x67) ) ) ? 4 : 0 )\
: 0 ) \
: ( 0xDF == ((const U8*)s)[0] ) ? \
( ( 0x56 == ((const U8*)s)[1] ) ? \
- ( ( ( 0x46 == ((const U8*)s)[2] ) && ( inRANGE(((const U8*)s)[3], 0x41, 0x44 ) ) ) ? 4 : 0 )\
- : ( ( ( 0x63 == ((const U8*)s)[1] ) && ( 0x52 == ((const U8*)s)[2] ) ) && ( inRANGE(((const U8*)s)[3], 0x62, 0x69 ) ) ) ? 4 : 0 )\
-: ( ( ( ( ( 0xED == ((const U8*)s)[0] ) && ( 0x70 == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x44 ) ) ) && ( inRANGE(((const U8*)s)[3], 0x41, 0x4A ) || inRANGE(((const U8*)s)[3], 0x51, 0x59 ) || inRANGE(((const U8*)s)[3], 0x62, 0x6A ) || inRANGE(((const U8*)s)[3], 0x70, 0x73 ) ) ) && ( inRANGE(((const U8*)s)[4], 0x41, 0x4A ) || inRANGE(((const U8*)s)[4], 0x51, 0x59 ) || inRANGE(((const U8*)s)[4], 0x62, 0x6A ) || inRANGE(((const U8*)s)[4], 0x70, 0x73 ) ) ) ? 5 : 0 )
+ ( ( ( 0x46 == ((const U8*)s)[2] ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x44) ) ) ? 4 : 0 )\
+ : ( ( ( 0x63 == ((const U8*)s)[1] ) && ( 0x52 == ((const U8*)s)[2] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x69) ) ) ? 4 : 0 )\
+: ( ( ( ( ( 0xED == ((const U8*)s)[0] ) && ( 0x70 == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x44) ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x70, 0x73) ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[4], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[4], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[4], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[4], 0x70, 0x73) ) ) ? 5 : 0 )
+
+
+/*** GENERATED CODE ***/
+#define is_QUOTEMETA_high(s) \
+( ( 0xB1 == ((const U8*)s)[0] ) ? \
+ ( ( 0x56 == ((const U8*)s)[1] ) ? 2 : 0 ) \
+: ( 0xB8 == ((const U8*)s)[0] ) ? \
+ ( ( ( 0x57 == ((const U8*)s)[1] ) && ( 0x70 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+: ( 0xBB == ((const U8*)s)[0] ) ? \
+ ( ( 0x51 == ((const U8*)s)[1] ) ? \
+ ( ( 0x73 == ((const U8*)s)[2] ) ? 3 : 0 ) \
+ : ( ( 0x52 == ((const U8*)s)[1] ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+: ( 0xBC == ((const U8*)s)[0] ) ? is_QUOTEMETA_high_part0_(s) : is_QUOTEMETA_high_part1_(s) )
/*
MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
- &regcharclass_multi_char_folds::multi_char_folds('u', 'a')
+ %regcharclass_multi_char_folds::multi_char_folds('u', 'a')
*/
/*** GENERATED CODE ***/
-#define is_MULTI_CHAR_FOLD_utf8_safe_part0(s,e) \
-( ( 0x86 == ((const U8*)s)[1] ) ? \
- ( ( 0x89 == ((const U8*)s)[2] || 0x93 == ((const U8*)s)[2] ) ? 3 : 2 )\
- : ( 0x89 == ((const U8*)s)[1] || 0x93 == ((const U8*)s)[1] ) ? 2 : 0 )
+#define is_MULTI_CHAR_FOLD_utf8_safe_part0_(s,e) \
+( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 3 : 0 )
/*** GENERATED CODE ***/
-#define is_MULTI_CHAR_FOLD_utf8_safe_part1(s,e) \
-( ( 0x88 == ((const U8*)s)[0] ) ? \
- ( ( ( 0xB0 == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x89 == ((const U8*)s)[0] ) ? \
- ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x8F == ((const U8*)s)[0] ) ? \
- ( ( ( ( 0x73 == ((const U8*)s)[1] ) && ( 0x8F == ((const U8*)s)[2] ) ) && ( 0x73 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
- : ( 0x91 == ((const U8*)s)[0] ) ? \
+#define is_MULTI_CHAR_FOLD_utf8_safe_part1_(s,e) \
+( ( 0x8F == ((const U8*)s)[0] ) ? \
+ ( ( 0x73 == ((const U8*)s)[1] ) ? \
+ ( ( 0x8F == ((const U8*)s)[2] ) ? \
+ ( ( 0x73 == ((const U8*)s)[3] ) ? 4 : 0 ) \
+ : ( ( ((const U8*)s)[2] & 0xBE ) == 's' ) ? 3 : 0 ) \
+ : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ? \
( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0xA2 == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0xA2, 0xA3 ) ) ? 2 : 0 ) \
- : ( 0xA3 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ? \
+ ( ( 0x8F == ((const U8*)s)[1] ) ? \
+ ( ( 0x73 == ((const U8*)s)[2] ) ? 3 : 0 ) \
+ : ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ? 2 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ? \
( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0xA6 == ((const U8*)s)[0] || 0xA8 == ((const U8*)s)[0] ) ? \
+ : ( ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ?\
( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xAB == ((const U8*)s)[0] ) ? \
- ( ( ( 0x70 == ((const U8*)s)[1] ) && ( 0x95 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ ( ( ( 0x70 == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 3 : 0 )\
: ( 0xB4 == ((const U8*)s)[0] ) ? \
( ( 0x53 == ((const U8*)s)[1] || 0x55 == ((const U8*)s)[1] ) ? \
( ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
@@ -1014,7 +1486,7 @@
( ( 0xAF == ((const U8*)s)[2] ) ? \
( ( 0x49 == ((const U8*)s)[3] ) ? \
( ( 0xAF == ((const U8*)s)[4] ) ? \
- ( ( inRANGE(((const U8*)s)[5], 0x41, 0x42 ) ) ? 6 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x41, 0x42) ) ? 6 : 0 )\
: ( ( 0xB1 == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
: 0 ) \
: ( ( 0xB1 == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
@@ -1026,11 +1498,11 @@
( ( 0xAF == ((const U8*)s)[2] ) ? \
( ( 0x49 == ((const U8*)s)[3] ) ? \
( ( 0xAF == ((const U8*)s)[4] ) ? \
- ( ( inRANGE(((const U8*)s)[5], 0x41, 0x42 ) ) ? 6 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x41, 0x42) ) ? 6 : 0 )\
: ( ( 0xB1 == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
: ( 0x62 == ((const U8*)s)[3] ) ? \
( ( 0xAF == ((const U8*)s)[4] ) ? \
- ( ( inRANGE(((const U8*)s)[5], 0x41, 0x42 ) ) ? 6 : 4 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x41, 0x42) ) ? 6 : 4 )\
: ( ( 0xB1 == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 6 : 4 )\
: 0 ) \
: ( ( 0xB1 == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
@@ -1050,36 +1522,42 @@
: ( ( ( ( 0x72 == ((const U8*)s)[2] ) && ( 0xB8 == ((const U8*)s)[3] ) ) && ( 0x52 == ((const U8*)s)[4] ) ) && ( 0x65 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
: 0 ) \
: ( 0xBF == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0x67, 0x68 ) ) ? \
- ( ( ( ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
- : ( ( ( ( 0x6A == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) || 0x57 == ((const U8*)s)[2] || 0x63 == ((const U8*)s)[2] || 0x70 == ((const U8*)s)[2] ) ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x67, 0x68) ) ? \
+ ( ( ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
+ : ( ( ( ( 0x6A == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) || 0x57 == ((const U8*)s)[2] || 0x63 == ((const U8*)s)[2] || 0x70 == ((const U8*)s)[2] ) ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
: 0 )
/*** GENERATED CODE ***/
-#define is_MULTI_CHAR_FOLD_utf8_safe_part2(s,e) \
-( ( 0x81 == ((const U8*)s)[0] ) ? \
+#define is_MULTI_CHAR_FOLD_utf8_safe_part2_(s,e) \
+( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ? \
( ( ( 0xAB == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x86 == ((const U8*)s)[0] ) ? \
- ( ( 0x86 == ((const U8*)s)[1] ) ? \
- ( ( 0x89 == ((const U8*)s)[2] || 0x93 == ((const U8*)s)[2] ) ? 3 : 2 )\
- : ( 0x89 == ((const U8*)s)[1] || 0x93 == ((const U8*)s)[1] ) ? 2 : 0 )\
- : ( 0x88 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? \
+ ( ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ? 3 : 2 )\
+ : ( ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ? \
( ( ( 0xB0 == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x89 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ? \
( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0x8F == ((const U8*)s)[0] ) ? \
- ( ( ( ( 0x73 == ((const U8*)s)[1] ) && ( 0x8F == ((const U8*)s)[2] ) ) && ( 0x73 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
- : ( 0x91 == ((const U8*)s)[0] ) ? \
+ ( ( 0x73 == ((const U8*)s)[1] ) ? \
+ ( ( 0x8F == ((const U8*)s)[2] ) ? \
+ ( ( 0x73 == ((const U8*)s)[3] ) ? 4 : 0 ) \
+ : ( ( ((const U8*)s)[2] & 0xBE ) == 's' ) ? 3 : 0 ) \
+ : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ? \
( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0xA2 == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0xA2, 0xA3 ) ) ? 2 : 0 ) \
- : ( 0xA3 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ? \
+ ( ( 0x8F == ((const U8*)s)[1] ) ? \
+ ( ( 0x73 == ((const U8*)s)[2] ) ? 3 : 0 ) \
+ : ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ? 2 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ? \
( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0xA6 == ((const U8*)s)[0] || 0xA8 == ((const U8*)s)[0] ) ? \
+ : ( ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ?\
( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xAB == ((const U8*)s)[0] ) ? \
- ( ( ( 0x70 == ((const U8*)s)[1] ) && ( 0x95 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ ( ( ( 0x70 == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 3 : 0 )\
: ( 0xB4 == ((const U8*)s)[0] ) ? \
( ( 0x53 == ((const U8*)s)[1] || 0x55 == ((const U8*)s)[1] ) ? \
( ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
@@ -1101,37 +1579,43 @@
: ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
: ( ( ( 0x55 == ((const U8*)s)[1] ) && ( 0xB4 == ((const U8*)s)[2] ) ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
: ( 0xBF == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0x67, 0x68 ) ) ? \
- ( ( ( ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
- : ( ( ( ( 0x6A == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) || 0x57 == ((const U8*)s)[2] || 0x63 == ((const U8*)s)[2] || 0x70 == ((const U8*)s)[2] ) ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x67, 0x68) ) ? \
+ ( ( ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
+ : ( ( ( ( 0x6A == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) || 0x57 == ((const U8*)s)[2] || 0x63 == ((const U8*)s)[2] || 0x70 == ((const U8*)s)[2] ) ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
: 0 )
/*** GENERATED CODE ***/
-#define is_MULTI_CHAR_FOLD_utf8_safe_part3(s,e) \
+#define is_MULTI_CHAR_FOLD_utf8_safe_part3_(s,e) \
( ((e)-(s) > 3) ? \
- ( ( 0x81 == ((const U8*)s)[0] ) ? \
+ ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ? \
( ( ( 0xAB == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x86 == ((const U8*)s)[0] ) ? \
- ( ( 0x86 == ((const U8*)s)[1] ) ? \
- ( ( 0x89 == ((const U8*)s)[2] || 0x93 == ((const U8*)s)[2] ) ? 3 : 2 )\
- : ( 0x89 == ((const U8*)s)[1] || 0x93 == ((const U8*)s)[1] ) ? 2 : 0 )\
- : ( 0x88 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? \
+ ( ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ? 3 : 2 )\
+ : ( ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ? \
( ( ( 0xB0 == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x89 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ? \
( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0x8F == ((const U8*)s)[0] ) ? \
- ( ( ( ( 0x73 == ((const U8*)s)[1] ) && ( 0x8F == ((const U8*)s)[2] ) ) && ( 0x73 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
- : ( 0x91 == ((const U8*)s)[0] ) ? \
+ ( ( 0x73 == ((const U8*)s)[1] ) ? \
+ ( ( 0x8F == ((const U8*)s)[2] ) ? \
+ ( ( 0x73 == ((const U8*)s)[3] ) ? 4 : 0 ) \
+ : ( ( ((const U8*)s)[2] & 0xBE ) == 's' ) ? 3 : 0 ) \
+ : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ? \
( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0xA2 == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0xA2, 0xA3 ) ) ? 2 : 0 ) \
- : ( 0xA3 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ? \
+ ( ( 0x8F == ((const U8*)s)[1] ) ? \
+ ( ( 0x73 == ((const U8*)s)[2] ) ? 3 : 0 ) \
+ : ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ? 2 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ? \
( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0xA6 == ((const U8*)s)[0] || 0xA8 == ((const U8*)s)[0] ) ? \
+ : ( ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ?\
( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xAB == ((const U8*)s)[0] ) ? \
- ( ( ( 0x70 == ((const U8*)s)[1] ) && ( 0x95 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ ( ( ( 0x70 == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 3 : 0 )\
: ( 0xB4 == ((const U8*)s)[0] ) ? \
( ( 0x53 == ((const U8*)s)[1] || 0x55 == ((const U8*)s)[1] ) ? \
( ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
@@ -1154,104 +1638,551 @@
: ( ( ( 0x55 == ((const U8*)s)[1] ) && ( 0xB4 == ((const U8*)s)[2] ) ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
: 0 ) \
: ((e)-(s) > 2) ? \
- ( ( 0x81 == ((const U8*)s)[0] ) ? \
+ ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ? \
( ( ( 0xAB == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x86 == ((const U8*)s)[0] ) ? \
- ( ( 0x86 == ((const U8*)s)[1] ) ? \
- ( ( 0x89 == ((const U8*)s)[2] || 0x93 == ((const U8*)s)[2] ) ? 3 : 2 )\
- : ( 0x89 == ((const U8*)s)[1] || 0x93 == ((const U8*)s)[1] ) ? 2 : 0 )\
- : ( 0x88 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? \
+ ( ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ? 3 : 2 )\
+ : ( ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ? \
( ( ( 0xB0 == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x89 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ? \
( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x91 == ((const U8*)s)[0] ) ? \
+ : ( 0x8F == ((const U8*)s)[0] ) ? \
+ ( ( ( 0x73 == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBE ) == 's' ) ) ? 3 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ? \
( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0xA2 == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0xA2, 0xA3 ) ) ? 2 : 0 ) \
- : ( 0xA3 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ? \
+ ( ( 0x8F == ((const U8*)s)[1] ) ? \
+ ( ( 0x73 == ((const U8*)s)[2] ) ? 3 : 0 ) \
+ : ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ? 2 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ? \
( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0xA6 == ((const U8*)s)[0] || 0xA8 == ((const U8*)s)[0] ) ? \
+ : ( ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ?\
( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( ( ( 0xAB == ((const U8*)s)[0] ) && ( 0x70 == ((const U8*)s)[1] ) ) && ( 0x95 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ : ( ( ( 0xAB == ((const U8*)s)[0] ) && ( 0x70 == ((const U8*)s)[1] ) ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 3 : 0 )\
: ((e)-(s) > 1) ? \
- ( ( 0x86 == ((const U8*)s)[0] ) ? \
- ( ( 0x86 == ((const U8*)s)[1] || 0x89 == ((const U8*)s)[1] || 0x93 == ((const U8*)s)[1] ) ? 2 : 0 )\
- : ( ( 0xA2 == ((const U8*)s)[0] ) && ( inRANGE(((const U8*)s)[1], 0xA2, 0xA3 ) ) ) ? 2 : 0 )\
+ ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+ : ( ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) && ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ) ? 2 : 0 )\
: 0 )
/*** GENERATED CODE ***/
#define is_MULTI_CHAR_FOLD_utf8_safe(s,e) \
( ((e)-(s) > 5) ? \
- ( ( 0x81 == ((const U8*)s)[0] ) ? \
+ ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ? \
( ( ( 0xAB == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x86 == ((const U8*)s)[0] ) ? is_MULTI_CHAR_FOLD_utf8_safe_part0(s,e) : is_MULTI_CHAR_FOLD_utf8_safe_part1(s,e) )\
-: ((e)-(s) > 4) ? is_MULTI_CHAR_FOLD_utf8_safe_part2(s,e) : is_MULTI_CHAR_FOLD_utf8_safe_part3(s,e) )
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? \
+ ( ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ? 3 : 2 )\
+ : ( ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ? \
+ ( ( ( 0xB0 == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ? is_MULTI_CHAR_FOLD_utf8_safe_part0_(s,e) : is_MULTI_CHAR_FOLD_utf8_safe_part1_(s,e) )\
+: ((e)-(s) > 4) ? is_MULTI_CHAR_FOLD_utf8_safe_part2_(s,e) : is_MULTI_CHAR_FOLD_utf8_safe_part3_(s,e) )
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part0_(s,e) \
+( ( 0x52 == ((const U8*)s)[1] ) ? \
+ ( ( 0x46 == ((const U8*)s)[2] ) ? \
+ ( ( ( ( 0xB8 == ((const U8*)s)[3] ) && ( 0x53 == ((const U8*)s)[4] ) ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 0x587 : 0 )\
+ : ( 0x63 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB8 == ((const U8*)s)[3] ) && ( 0x52 == ((const U8*)s)[4] ) ) ? ( ( 0x46 == ((const U8*)s)[5] ) ? 0xFB14\
+ : ( 0x52 == ((const U8*)s)[5] ) ? 0xFB15 \
+ : ( 0x54 == ((const U8*)s)[5] ) ? 0xFB17 \
+ : ( 0x65 == ((const U8*)s)[5] ) ? 0xFB13 : 0 ) : 0 )\
+ : ( ( ( ( 0x72 == ((const U8*)s)[2] ) && ( 0xB8 == ((const U8*)s)[3] ) ) && ( 0x52 == ((const U8*)s)[4] ) ) && ( 0x65 == ((const U8*)s)[5] ) ) ? 0xFB16 : 0 )\
+ : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part1_(s,e) \
+( ( 0xBF == ((const U8*)s)[0] ) ? \
+ ( ( 0x67 == ((const U8*)s)[1] ) ? \
+ ( ( 0x41 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F80 : 0 )\
+ : ( 0x42 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F81 : 0 )\
+ : ( 0x43 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F82 : 0 )\
+ : ( 0x44 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F83 : 0 )\
+ : ( 0x45 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F84 : 0 )\
+ : ( 0x46 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F85 : 0 )\
+ : ( 0x47 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F86 : 0 )\
+ : ( ( ( 0x48 == ((const U8*)s)[2] ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F87 : 0 )\
+ : ( 0x68 == ((const U8*)s)[1] ) ? \
+ ( ( 0x41 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F90 : 0 )\
+ : ( 0x42 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F91 : 0 )\
+ : ( 0x43 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F92 : 0 )\
+ : ( 0x44 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F93 : 0 )\
+ : ( 0x45 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F94 : 0 )\
+ : ( 0x46 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F95 : 0 )\
+ : ( 0x47 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F96 : 0 )\
+ : ( ( ( 0x48 == ((const U8*)s)[2] ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F97 : 0 )\
+ : ( 0x6A == ((const U8*)s)[1] ) ? \
+ ( ( 0x41 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA0 : 0 )\
+ : ( 0x42 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA1 : 0 )\
+ : ( 0x43 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA2 : 0 )\
+ : ( 0x44 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA3 : 0 )\
+ : ( 0x45 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA4 : 0 )\
+ : ( 0x46 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA5 : 0 )\
+ : ( 0x47 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA6 : 0 )\
+ : ( 0x48 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA7 : 0 )\
+ : ( 0x57 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FB2 : 0 )\
+ : ( 0x63 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FC2 : 0 )\
+ : ( ( ( 0x70 == ((const U8*)s)[2] ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FF2 : 0 )\
+ : 0 ) \
+ : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part2_(s,e) \
+( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03 \
+ : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 ) \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part3_(s,e) \
+( ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ? \
+ ( ( ( 0xB0 == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ? \
+ ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+ : ( 0x8F == ((const U8*)s)[0] ) ? \
+ ( ( 0x73 == ((const U8*)s)[1] ) ? \
+ ( ( 0x8F == ((const U8*)s)[2] ) ? \
+ ( ( 0x73 == ((const U8*)s)[3] ) ? 0x59 : 0 ) \
+ : ( ( ((const U8*)s)[2] & 0xBF ) == 's' ) ? 0x59 \
+ : ( ( ((const U8*)s)[2] & 0xBF ) == 't' ) ? 0xFB05 : 0 ) \
+ : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ? \
+ ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ? \
+ ( ( 0x8F == ((const U8*)s)[1] ) ? \
+ ( ( 0x73 == ((const U8*)s)[2] ) ? 0x59 : 0 ) \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ? \
+ ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) ? \
+ ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ? \
+ ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+ : ( 0xAB == ((const U8*)s)[0] ) ? \
+ ( ( ( 0x70 == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 0x149 : 0 )\
+ : ( 0xB4 == ((const U8*)s)[0] ) ? \
+ ( ( 0x53 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FB4 : 0 )\
+ : ( 0x55 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FC4 : 0 )\
+ : ( 0x58 == ((const U8*)s)[1] ) ? \
+ ( ( 0xB1 == ((const U8*)s)[2] ) ? \
+ ( ( 0x43 == ((const U8*)s)[3] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[4] ) && ( 0x68 == ((const U8*)s)[5] ) ) ? 0x1FB7 : 0x1FB6 )\
+ : 0 ) \
+ : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FB3 : 0 )\
+ : ( 0x66 == ((const U8*)s)[1] ) ? \
+ ( ( 0xB1 == ((const U8*)s)[2] ) ? \
+ ( ( 0x43 == ((const U8*)s)[3] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[4] ) && ( 0x68 == ((const U8*)s)[5] ) ) ? 0x1FC7 : 0x1FC6 )\
+ : 0 ) \
+ : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FC3 : 0 )\
+ : ( 0x68 == ((const U8*)s)[1] ) ? \
+ ( ( 0xAF == ((const U8*)s)[2] ) ? \
+ ( ( 0x49 == ((const U8*)s)[3] ) ? \
+ ( ( 0xAF == ((const U8*)s)[4] ) ? \
+ ( ( 0x41 == ((const U8*)s)[5] ) ? 0x1FD2 \
+ : ( 0x42 == ((const U8*)s)[5] ) ? 0x390 : 0 ) \
+ : ( ( 0xB1 == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 0x1FD7 : 0 )\
+ : 0 ) \
+ : ( ( 0xB1 == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FD6 : 0 )\
+ : 0 ) \
+ : ( 0xB5 == ((const U8*)s)[0] ) ? \
+ ( ( 0x42 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x62 == ((const U8*)s)[3] ) ) ? 0x1FE4 : 0 )\
+ : ( 0x46 == ((const U8*)s)[1] ) ? \
+ ( ( 0xAF == ((const U8*)s)[2] ) ? \
+ ( ( 0x49 == ((const U8*)s)[3] ) ? \
+ ( ( 0xAF == ((const U8*)s)[4] ) ? \
+ ( ( 0x41 == ((const U8*)s)[5] ) ? 0x1FE2 \
+ : ( 0x42 == ((const U8*)s)[5] ) ? 0x3B0 : 0 ) \
+ : ( ( 0xB1 == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 0x1FE7 : 0 )\
+ : ( 0x62 == ((const U8*)s)[3] ) ? \
+ ( ( 0xAF == ((const U8*)s)[4] ) ? \
+ ( ( 0x41 == ((const U8*)s)[5] ) ? 0x1F52 \
+ : ( 0x42 == ((const U8*)s)[5] ) ? 0x1F54 : 0x1F50 ) \
+ : ( ( 0xB1 == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 0x1F56 : 0x1F50 )\
+ : 0 ) \
+ : ( ( 0xB1 == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FE6 : 0 )\
+ : ( 0x4A == ((const U8*)s)[1] ) ? \
+ ( ( 0xB1 == ((const U8*)s)[2] ) ? \
+ ( ( 0x43 == ((const U8*)s)[3] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[4] ) && ( 0x68 == ((const U8*)s)[5] ) ) ? 0x1FF7 : 0x1FF6 )\
+ : 0 ) \
+ : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FF3 : 0 )\
+ : ( ( ( 0x55 == ((const U8*)s)[1] ) && ( 0xB4 == ((const U8*)s)[2] ) ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FF4 : 0 )\
+ : ( 0xB8 == ((const U8*)s)[0] ) ? what_MULTI_CHAR_FOLD_utf8_safe_part0_(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part1_(s,e) )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part4_(s,e) \
+( ( 0x42 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x62 == ((const U8*)s)[3] ) ) ? 0x1FE4 : 0 )\
+ : ( 0x46 == ((const U8*)s)[1] ) ? \
+ ( ( 0xAF == ((const U8*)s)[2] ) ? \
+ ( ( 0x62 == ((const U8*)s)[3] ) ? 0x1F50 : 0 ) \
+ : ( ( 0xB1 == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FE6 : 0 )\
+ : ( 0x4A == ((const U8*)s)[1] ) ? \
+ ( ( 0xB1 == ((const U8*)s)[2] ) ? \
+ ( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FF6 : 0 ) \
+ : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FF3 : 0 )\
+ : ( ( ( 0x55 == ((const U8*)s)[1] ) && ( 0xB4 == ((const U8*)s)[2] ) ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FF4 : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part5_(s,e) \
+( ( 0xBF == ((const U8*)s)[0] ) ? \
+ ( ( 0x67 == ((const U8*)s)[1] ) ? \
+ ( ( 0x41 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F80 : 0 )\
+ : ( 0x42 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F81 : 0 )\
+ : ( 0x43 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F82 : 0 )\
+ : ( 0x44 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F83 : 0 )\
+ : ( 0x45 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F84 : 0 )\
+ : ( 0x46 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F85 : 0 )\
+ : ( 0x47 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F86 : 0 )\
+ : ( ( ( 0x48 == ((const U8*)s)[2] ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F87 : 0 )\
+ : ( 0x68 == ((const U8*)s)[1] ) ? \
+ ( ( 0x41 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F90 : 0 )\
+ : ( 0x42 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F91 : 0 )\
+ : ( 0x43 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F92 : 0 )\
+ : ( 0x44 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F93 : 0 )\
+ : ( 0x45 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F94 : 0 )\
+ : ( 0x46 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F95 : 0 )\
+ : ( 0x47 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F96 : 0 )\
+ : ( ( ( 0x48 == ((const U8*)s)[2] ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F97 : 0 )\
+ : ( 0x6A == ((const U8*)s)[1] ) ? \
+ ( ( 0x41 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA0 : 0 )\
+ : ( 0x42 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA1 : 0 )\
+ : ( 0x43 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA2 : 0 )\
+ : ( 0x44 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA3 : 0 )\
+ : ( 0x45 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA4 : 0 )\
+ : ( 0x46 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA5 : 0 )\
+ : ( 0x47 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA6 : 0 )\
+ : ( 0x48 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA7 : 0 )\
+ : ( 0x57 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FB2 : 0 )\
+ : ( 0x63 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FC2 : 0 )\
+ : ( ( ( 0x70 == ((const U8*)s)[2] ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FF2 : 0 )\
+ : 0 ) \
+ : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part6_(s,e) \
+( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ? \
+ ( ( ( 0xAB == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03 \
+ : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 ) \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ? \
+ ( ( ( 0xB0 == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ? \
+ ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+ : ( 0x8F == ((const U8*)s)[0] ) ? \
+ ( ( 0x73 == ((const U8*)s)[1] ) ? \
+ ( ( 0x8F == ((const U8*)s)[2] ) ? \
+ ( ( 0x73 == ((const U8*)s)[3] ) ? 0x59 : 0 ) \
+ : ( ( ((const U8*)s)[2] & 0xBF ) == 's' ) ? 0x59 \
+ : ( ( ((const U8*)s)[2] & 0xBF ) == 't' ) ? 0xFB05 : 0 ) \
+ : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ? \
+ ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ? \
+ ( ( 0x8F == ((const U8*)s)[1] ) ? \
+ ( ( 0x73 == ((const U8*)s)[2] ) ? 0x59 : 0 ) \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ? \
+ ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) ? \
+ ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ? \
+ ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+ : ( 0xAB == ((const U8*)s)[0] ) ? \
+ ( ( ( 0x70 == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 0x149 : 0 )\
+ : ( 0xB4 == ((const U8*)s)[0] ) ? \
+ ( ( 0x53 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FB4 : 0 )\
+ : ( 0x55 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FC4 : 0 )\
+ : ( 0x58 == ((const U8*)s)[1] ) ? \
+ ( ( 0xB1 == ((const U8*)s)[2] ) ? \
+ ( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FB6 : 0 ) \
+ : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FB3 : 0 )\
+ : ( 0x66 == ((const U8*)s)[1] ) ? \
+ ( ( 0xB1 == ((const U8*)s)[2] ) ? \
+ ( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FC6 : 0 ) \
+ : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FC3 : 0 )\
+ : ( ( ( 0x68 == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FD6 : 0 )\
+ : ( 0xB5 == ((const U8*)s)[0] ) ? \
+ ( ( 0x42 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x62 == ((const U8*)s)[3] ) ) ? 0x1FE4 : 0 )\
+ : ( 0x46 == ((const U8*)s)[1] ) ? \
+ ( ( 0xAF == ((const U8*)s)[2] ) ? \
+ ( ( 0x62 == ((const U8*)s)[3] ) ? 0x1F50 : 0 ) \
+ : ( ( 0xB1 == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FE6 : 0 )\
+ : ( 0x4A == ((const U8*)s)[1] ) ? \
+ ( ( 0xB1 == ((const U8*)s)[2] ) ? \
+ ( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FF6 : 0 ) \
+ : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FF3 : 0 )\
+ : ( ( ( 0x55 == ((const U8*)s)[1] ) && ( 0xB4 == ((const U8*)s)[2] ) ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FF4 : 0 )\
+ : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part7_(s,e) \
+( ((e)-(s) > 2) ? \
+ ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ? \
+ ( ( ( 0xAB == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03 \
+ : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 ) \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ? \
+ ( ( ( 0xB0 == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ? \
+ ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+ : ( 0x8F == ((const U8*)s)[0] ) ? \
+ ( ( 0x73 == ((const U8*)s)[1] ) ? \
+ ( ( ( ((const U8*)s)[2] & 0xBF ) == 's' ) ? 0x59 \
+ : ( ( ((const U8*)s)[2] & 0xBF ) == 't' ) ? 0xFB05 : 0 ) \
+ : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ? \
+ ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ? \
+ ( ( 0x8F == ((const U8*)s)[1] ) ? \
+ ( ( 0x73 == ((const U8*)s)[2] ) ? 0x59 : 0 ) \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ? \
+ ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) ? \
+ ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ? \
+ ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+ : ( ( ( 0xAB == ((const U8*)s)[0] ) && ( 0x70 == ((const U8*)s)[1] ) ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 0x149 : 0 )\
+: ((e)-(s) > 1) ? \
+ ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 0xFB00 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 ) \
+ : 0 ) \
+: 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe(s,e) \
+( ((e)-(s) > 5) ? \
+ ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ? \
+ ( ( ( 0xAB == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? what_MULTI_CHAR_FOLD_utf8_safe_part2_(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part3_(s,e) )\
+: ((e)-(s) > 4) ? \
+ ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ? \
+ ( ( ( 0xAB == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03 \
+ : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 ) \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ? \
+ ( ( ( 0xB0 == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ? \
+ ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+ : ( 0x8F == ((const U8*)s)[0] ) ? \
+ ( ( 0x73 == ((const U8*)s)[1] ) ? \
+ ( ( 0x8F == ((const U8*)s)[2] ) ? \
+ ( ( 0x73 == ((const U8*)s)[3] ) ? 0x59 : 0 ) \
+ : ( ( ((const U8*)s)[2] & 0xBF ) == 's' ) ? 0x59 \
+ : ( ( ((const U8*)s)[2] & 0xBF ) == 't' ) ? 0xFB05 : 0 ) \
+ : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ? \
+ ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ? \
+ ( ( 0x8F == ((const U8*)s)[1] ) ? \
+ ( ( 0x73 == ((const U8*)s)[2] ) ? 0x59 : 0 ) \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ? \
+ ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) ? \
+ ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ? \
+ ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+ : ( 0xAB == ((const U8*)s)[0] ) ? \
+ ( ( ( 0x70 == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 0x149 : 0 )\
+ : ( 0xB4 == ((const U8*)s)[0] ) ? \
+ ( ( 0x53 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FB4 : 0 )\
+ : ( 0x55 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FC4 : 0 )\
+ : ( 0x58 == ((const U8*)s)[1] ) ? \
+ ( ( 0xB1 == ((const U8*)s)[2] ) ? \
+ ( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FB6 : 0 ) \
+ : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FB3 : 0 )\
+ : ( 0x66 == ((const U8*)s)[1] ) ? \
+ ( ( 0xB1 == ((const U8*)s)[2] ) ? \
+ ( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FC6 : 0 ) \
+ : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FC3 : 0 )\
+ : ( ( ( 0x68 == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FD6 : 0 )\
+ : ( 0xB5 == ((const U8*)s)[0] ) ? what_MULTI_CHAR_FOLD_utf8_safe_part4_(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part5_(s,e) )\
+: ((e)-(s) > 3) ? what_MULTI_CHAR_FOLD_utf8_safe_part6_(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part7_(s,e) )
/*
MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
- &regcharclass_multi_char_folds::multi_char_folds('l', 'a')
+ %regcharclass_multi_char_folds::multi_char_folds('l', 'a')
*/
/*** GENERATED CODE ***/
#define is_MULTI_CHAR_FOLD_latin1_safe(s,e) \
( ((e)-(s) > 2) ? \
- ( ( ( ((const U8*)s)[0] & 0xBF ) == 0x86 ) ? \
- ( ( ( ((const U8*)s)[1] & 0xBF ) == 0x86 ) ? \
- ( ( ( ( ((const U8*)s)[2] & 0xBF ) == 0x89 ) || ( ( ((const U8*)s)[2] & 0xBF ) == 0x93 ) ) ? 3 : 2 )\
- : ( ( ( ((const U8*)s)[1] & 0xBF ) == 0x89 ) || ( ( ((const U8*)s)[1] & 0xBF ) == 0x93 ) ) ? 2 : 0 )\
- : ( ( ( ((const U8*)s)[0] & 0xBF ) == 0xA2 ) && ( ( ((const U8*)s)[1] & 0xBE ) == 0xA2 ) ) ? 2 : 0 )\
+ ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? \
+ ( ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ? 3 : 2 )\
+ : ( ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+ : ( ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) && ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ) ? 2 : 0 )\
+: ((e)-(s) > 1) ? \
+ ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+ : ( ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) && ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ) ? 2 : 0 )\
+: 0 )
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_latin1_safe(s,e) \
+( ((e)-(s) > 2) ? \
+ ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03 \
+ : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 ) \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 ) \
+ : 0 ) \
: ((e)-(s) > 1) ? \
- ( ( ( ((const U8*)s)[0] & 0xBF ) == 0x86 ) ? \
- ( ( ( ( ((const U8*)s)[1] & 0xBF ) == 0x86 ) || ( ( ((const U8*)s)[1] & 0xBF ) == 0x89 ) || ( ( ((const U8*)s)[1] & 0xBF ) == 0x93 ) ) ? 2 : 0 )\
- : ( ( ( ((const U8*)s)[0] & 0xBF ) == 0xA2 ) && ( ( ((const U8*)s)[1] & 0xBE ) == 0xA2 ) ) ? 2 : 0 )\
+ ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 0xFB00 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 ) \
+ : 0 ) \
: 0 )
/*
THREE_CHAR_FOLD: A three-character multi-char fold
- &regcharclass_multi_char_folds::multi_char_folds('u', '3')
+ %regcharclass_multi_char_folds::multi_char_folds('u', '3')
*/
/*** GENERATED CODE ***/
#define is_THREE_CHAR_FOLD_utf8_safe(s,e) \
( ((e)-(s) > 5) ? \
- ( ( 0x86 == ((const U8*)s)[0] ) ? \
- ( ( ( 0x86 == ((const U8*)s)[1] ) && ( 0x89 == ((const U8*)s)[2] || 0x93 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) && ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ) ? 3 : 0 )\
: ( 0xB4 == ((const U8*)s)[0] ) ? \
( ( 0x58 == ((const U8*)s)[1] || 0x66 == ((const U8*)s)[1] ) ? \
( ( ( ( ( 0xB1 == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) && ( 0xB4 == ((const U8*)s)[4] ) ) && ( 0x68 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
: ( ( ( 0x68 == ((const U8*)s)[1] ) && ( 0xAF == ((const U8*)s)[2] ) ) && ( 0x49 == ((const U8*)s)[3] ) ) ? ( ( 0xAF == ((const U8*)s)[4] ) ?\
- ( ( inRANGE(((const U8*)s)[5], 0x41, 0x42 ) ) ? 6 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x41, 0x42) ) ? 6 : 0 )\
: ( ( 0xB1 == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 6 : 0 ) : 0 )\
: ( 0xB5 == ((const U8*)s)[0] ) ? \
( ( 0x46 == ((const U8*)s)[1] ) ? \
( ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x49 == ((const U8*)s)[3] || 0x62 == ((const U8*)s)[3] ) ) ? ( ( 0xAF == ((const U8*)s)[4] ) ?\
- ( ( inRANGE(((const U8*)s)[5], 0x41, 0x42 ) ) ? 6 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x41, 0x42) ) ? 6 : 0 )\
: ( ( 0xB1 == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 6 : 0 ) : 0 )\
: ( ( ( ( ( 0x4A == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) && ( 0x43 == ((const U8*)s)[3] ) ) && ( 0xB4 == ((const U8*)s)[4] ) ) && ( 0x68 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
: 0 ) \
-: ( ( ( ((e)-(s) > 2) && ( 0x86 == ((const U8*)s)[0] ) ) && ( 0x86 == ((const U8*)s)[1] ) ) && ( 0x89 == ((const U8*)s)[2] || 0x93 == ((const U8*)s)[2] ) ) ? 3 : 0 )
+: ( ( ( ((e)-(s) > 2) && ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ) && ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ) && ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ) ? 3 : 0 )
/*
THREE_CHAR_FOLD: A three-character multi-char fold
- &regcharclass_multi_char_folds::multi_char_folds('l', '3')
+ %regcharclass_multi_char_folds::multi_char_folds('l', '3')
*/
/*** GENERATED CODE ***/
#define is_THREE_CHAR_FOLD_latin1_safe(s,e) \
-( ( ( ( ( ((e) - (s)) >= 3 ) && ( ( ((const U8*)s)[0] & 0xBF ) == 0x86 ) ) && ( ( ((const U8*)s)[1] & 0xBF ) == 0x86 ) ) && ( ( ( ((const U8*)s)[2] & 0xBF ) == 0x89 ) || ( ( ((const U8*)s)[2] & 0xBF ) == 0x93 ) ) ) ? 3 : 0 )
+( ( ( ( ( ((e) - (s)) >= 3 ) && ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ) && ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ) && ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ) ? 3 : 0 )
/*
THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
- &regcharclass_multi_char_folds::multi_char_folds('u', 'h')
+ %regcharclass_multi_char_folds::multi_char_folds('u', 'h')
*/
/*** GENERATED CODE ***/
#define is_THREE_CHAR_FOLD_HEAD_utf8_safe(s,e) \
( ((e)-(s) > 3) ? \
- ( ( ( ( ((const U8*)s)[0] & 0xEF ) == 0x81 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0x88 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0xA2 ) || ((const U8*)s)[0] == 0xA6 || ((const U8*)s)[0] == 0xA8 ) ? 1\
- : ( 0x86 == ((const U8*)s)[0] ) ? \
- ( ( 0x86 == ((const U8*)s)[1] ) ? 2 : 1 ) \
+ ( ( ( ( ((const U8*)s)[0] & 0xAF ) == 'a' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 'h' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 's' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ? 1\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 2 : 1 ) \
+ : ( 0x8F == ((const U8*)s)[0] ) ? \
+ ( ( 0x73 == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xAB == ((const U8*)s)[0] ) ? \
( ( 0x70 == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xB4 == ((const U8*)s)[0] ) ? \
@@ -1271,14 +2202,16 @@
: ( 0xB8 == ((const U8*)s)[0] ) ? \
( ( ( 0x52 == ((const U8*)s)[1] ) && ( 0x46 == ((const U8*)s)[2] || 0x63 == ((const U8*)s)[2] || 0x72 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xBF == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0x67, 0x68 ) ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) ) ? 3 : 0 ) \
- : ( ( 0x6A == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) || 0x57 == ((const U8*)s)[2] || 0x63 == ((const U8*)s)[2] || 0x70 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x67, 0x68) ) ? \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) ) ? 3 : 0 )\
+ : ( ( 0x6A == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) || 0x57 == ((const U8*)s)[2] || 0x63 == ((const U8*)s)[2] || 0x70 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: 0 ) \
: ((e)-(s) > 2) ? \
- ( ( ( ( ((const U8*)s)[0] & 0xEF ) == 0x81 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0x88 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0xA2 ) || ((const U8*)s)[0] == 0xA6 || ((const U8*)s)[0] == 0xA8 ) ? 1\
- : ( 0x86 == ((const U8*)s)[0] ) ? \
- ( ( 0x86 == ((const U8*)s)[1] ) ? 2 : 1 ) \
+ ( ( ( ( ((const U8*)s)[0] & 0xAF ) == 'a' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 'h' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 's' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ? 1\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 2 : 1 ) \
+ : ( 0x8F == ((const U8*)s)[0] ) ? \
+ ( ( 0x73 == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xAB == ((const U8*)s)[0] ) ? \
( ( 0x70 == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xB4 == ((const U8*)s)[0] ) ? \
@@ -1288,37 +2221,39 @@
: ( 0xB8 == ((const U8*)s)[0] ) ? \
( ( ( 0x52 == ((const U8*)s)[1] ) && ( 0x46 == ((const U8*)s)[2] || 0x63 == ((const U8*)s)[2] || 0x72 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xBF == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0x67, 0x68 ) ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) ) ? 3 : 0 ) \
- : ( ( 0x6A == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) || 0x57 == ((const U8*)s)[2] || 0x63 == ((const U8*)s)[2] || 0x70 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x67, 0x68) ) ? \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) ) ? 3 : 0 )\
+ : ( ( 0x6A == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) || 0x57 == ((const U8*)s)[2] || 0x63 == ((const U8*)s)[2] || 0x70 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: 0 ) \
: ((e)-(s) > 1) ? \
- ( ( ( ( ((const U8*)s)[0] & 0xEF ) == 0x81 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0x88 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0xA2 ) || ((const U8*)s)[0] == 0xA6 || ((const U8*)s)[0] == 0xA8 ) ? 1\
- : ( 0x86 == ((const U8*)s)[0] ) ? \
- ( ( 0x86 == ((const U8*)s)[1] ) ? 2 : 1 ) \
+ ( ( ( ( ((const U8*)s)[0] & 0xAF ) == 'a' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 'h' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 's' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ? 1\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 2 : 1 ) \
+ : ( 0x8F == ((const U8*)s)[0] ) ? \
+ ( ( 0x73 == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xAB == ((const U8*)s)[0] ) ? \
( ( 0x70 == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xB4 == ((const U8*)s)[0] ) ? \
( ( 0x53 == ((const U8*)s)[1] || 0x55 == ((const U8*)s)[1] || 0x58 == ((const U8*)s)[1] || 0x66 == ((const U8*)s)[1] || 0x68 == ((const U8*)s)[1] ) ? 2 : 0 )\
: ( ( 0xB5 == ((const U8*)s)[0] ) && ( ( ( ((const U8*)s)[1] & 0xFB ) == 0x42 ) || ((const U8*)s)[1] == 0x4A || ((const U8*)s)[1] == 0x55 ) ) ? 2 : 0 )\
: ((e)-(s) > 0) ? \
- ( ( ( ((const U8*)s)[0] & 0xEF ) == 0x81 ) || ( ( ((const U8*)s)[0] & 0xDF ) == 0x86 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0x88 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0xA2 ) || ((const U8*)s)[0] == 0xA8 )\
+ ( ( ( ((const U8*)s)[0] & 0xAF ) == 'a' ) || ( ( ((const U8*)s)[0] & 0x9F ) == 'f' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 'h' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 's' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) )\
: 0 )
/*
THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
- &regcharclass_multi_char_folds::multi_char_folds('l', 'h')
+ %regcharclass_multi_char_folds::multi_char_folds('l', 'h')
*/
/*** GENERATED CODE ***/
#define is_THREE_CHAR_FOLD_HEAD_latin1_safe(s,e) \
( ((e)-(s) > 1) ? \
- ( ( ( ( ((const U8*)s)[0] & 0xAF ) == 0x81 ) || ( ( ((const U8*)s)[0] & 0xBE ) == 0x88 ) || ( ( ((const U8*)s)[0] & 0xBE ) == 0xA2 ) || ( ( ((const U8*)s)[0] & 0xBF ) == 0xA6 ) || ( ( ((const U8*)s)[0] & 0xBF ) == 0xA8 ) ) ? 1\
- : ( ( ((const U8*)s)[0] & 0xBF ) == 0x86 ) ? \
- ( ( ( ((const U8*)s)[1] & 0xBF ) == 0x86 ) ? 2 : 1 ) \
+ ( ( ( ( ((const U8*)s)[0] & 0xAF ) == 'a' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 'h' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 's' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ? 1\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 2 : 1 ) \
: 0 ) \
: ((e)-(s) > 0) ? \
- ( ( ( ((const U8*)s)[0] & 0xAF ) == 0x81 ) || ( ( ((const U8*)s)[0] & 0x9F ) == 0x86 ) || ( ( ((const U8*)s)[0] & 0xBE ) == 0x88 ) || ( ( ((const U8*)s)[0] & 0xBE ) == 0xA2 ) || ( ( ((const U8*)s)[0] & 0xBF ) == 0xA8 ) )\
+ ( ( ( ((const U8*)s)[0] & 0xAF ) == 'a' ) || ( ( ((const U8*)s)[0] & 0x9F ) == 'f' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 'h' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 's' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) )\
: 0 )
/*
@@ -1330,7 +2265,7 @@
#define is_FOLDS_TO_MULTI_utf8(s) \
( ( 0x8A == ((const U8*)s)[0] ) ? \
( ( 0x73 == ((const U8*)s)[1] ) ? 2 : 0 ) \
-: ( 0x8D == ((const U8*)s)[0] || 0x9C == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0xB3, 0xB4 ) ) ?\
+: ( 0x8D == ((const U8*)s)[0] || 0x9C == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], 0xB3, 0xB4) ) ?\
( ( 0x57 == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0x8E == ((const U8*)s)[0] ) ? \
( ( 0x4A == ((const U8*)s)[1] ) ? 2 : 0 ) \
@@ -1338,17 +2273,17 @@
( ( ( 0x53 == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xBF == ((const U8*)s)[0] ) ? \
( ( 0x63 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x65, 0x69 ) || 0x72 == ((const U8*)s)[2] ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x65, 0x69) || 0x72 == ((const U8*)s)[2] ) ? 3 : 0 )\
: ( 0x69 == ((const U8*)s)[1] ) ? \
( ( 0x57 == ((const U8*)s)[2] || 0x59 == ((const U8*)s)[2] || 0x63 == ((const U8*)s)[2] || 0x65 == ((const U8*)s)[2] ) ? 3 : 0 )\
: ( 0x70 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x73 ) ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x73) ) ? 3 : 0 )\
: ( 0x71 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x56 ) || 0x59 == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x62, 0x63 ) || inRANGE(((const U8*)s)[2], 0x65, 0x66 ) || 0x70 == ((const U8*)s)[2] ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x56) || 0x59 == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x63) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x65, 0x66) || 0x70 == ((const U8*)s)[2] ) ? 3 : 0 )\
: ( 0x72 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x43, 0x45 ) || inRANGE(((const U8*)s)[2], 0x47, 0x48 ) || 0x53 == ((const U8*)s)[2] || 0x59 == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x65, 0x66 ) ) ? 3 : 0 )\
- : ( ( 0x73 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x43, 0x45 ) || inRANGE(((const U8*)s)[2], 0x47, 0x48 ) || 0x59 == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x62, 0x63 ) || inRANGE(((const U8*)s)[2], 0x65, 0x66 ) || 0x70 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-: ( ( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x72 == ((const U8*)s)[1] ) ) && ( 0x67 == ((const U8*)s)[2] ) ) && ( inRANGE(((const U8*)s)[3], 0x41, 0x47 ) || inRANGE(((const U8*)s)[3], 0x62, 0x66 ) ) ) ? 4 : 0 )
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x43, 0x45) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x47, 0x48) || 0x53 == ((const U8*)s)[2] || 0x59 == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x65, 0x66) ) ? 3 : 0 )\
+ : ( ( 0x73 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x43, 0x45) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x47, 0x48) || 0x59 == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x63) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x65, 0x66) || 0x70 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+: ( ( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x72 == ((const U8*)s)[1] ) ) && ( 0x67 == ((const U8*)s)[2] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x47) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x66) ) ) ? 4 : 0 )
/*
PROBLEMATIC_LOCALE_FOLD: characters whose fold is problematic under locale
@@ -1357,11 +2292,11 @@
*/
/*** GENERATED CODE ***/
#define is_PROBLEMATIC_LOCALE_FOLD_utf8(s) \
-( ( ( ((const U8*)s)[0] <= 0x40 ) || inRANGE(((const U8*)s)[0], 0x4B, 0x50 ) || inRANGE(((const U8*)s)[0], 0x5A, 0x61 ) || inRANGE(((const U8*)s)[0], 0x6B, 0x6F ) || inRANGE(((const U8*)s)[0], 0x79, 0x7F ) || inRANGE(((const U8*)s)[0], 0x81, 0x89 ) || inRANGE(((const U8*)s)[0], 0x91, 0x99 ) || inRANGE(((const U8*)s)[0], 0xA1, 0xA9 ) || 0xAD == ((const U8*)s)[0] || 0xBD == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0xC0, 0xC9 ) || inRANGE(((const U8*)s)[0], 0xD0, 0xD9 ) || 0xE0 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0xE2, 0xE9 ) || inRANGE(((const U8*)s)[0], 0xF0, 0xF9 ) || 0xFF == ((const U8*)s)[0] ) ? 1\
-: ( 0x80 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0x8A, 0x8B ) ) ?\
- ( ( inRANGE(((const U8*)s)[1], 0x41, 0x4A ) || inRANGE(((const U8*)s)[1], 0x51, 0x59 ) || inRANGE(((const U8*)s)[1], 0x62, 0x6A ) || inRANGE(((const U8*)s)[1], 0x70, 0x73 ) ) ? 2 : 0 )\
+( ( ( ((const U8*)s)[0] <= ' ' ) || inRANGE_helper_(U8, ((const U8*)s)[0], '.', '&') || inRANGE_helper_(U8, ((const U8*)s)[0], '!', '/') || inRANGE_helper_(U8, ((const U8*)s)[0], ',', '?') || inRANGE_helper_(U8, ((const U8*)s)[0], '`', '"') || inRANGE_helper_(U8, ((const U8*)s)[0], 'a', 'i') || inRANGE_helper_(U8, ((const U8*)s)[0], 'j', 'r') || inRANGE_helper_(U8, ((const U8*)s)[0], '~', 'z') || '[' == ((const U8*)s)[0] || ']' == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], '{', 'I') || inRANGE_helper_(U8, ((const U8*)s)[0], '}', 'R') || '\\' == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], 'S', 'Z') || inRANGE_helper_(U8, ((const U8*)s)[0], '0', '9') || 0xFF == ((const U8*)s)[0] ) ? 1\
+: ( 0x80 == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], 0x8A, 0x8B) ) ?\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x70, 0x73) ) ? 2 : 0 )\
: ( 0x8D == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0x57, 0x58 ) ) ? 2 : 0 ) \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x57, 0x58) ) ? 2 : 0 ) \
: ( 0x8E == ((const U8*)s)[0] ) ? \
( ( 0x4A == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0x8F == ((const U8*)s)[0] ) ? \
@@ -1370,19 +2305,18 @@
( ( 0x57 == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xAF == ((const U8*)s)[0] ) ? \
( ( 0x48 == ((const U8*)s)[1] ) ? 2 : 0 ) \
-: ( inRANGE(((const U8*)s)[0], 0xB3, 0xB4 ) ) ? \
+: ( inRANGE_helper_(U8, ((const U8*)s)[0], 0xB3, 0xB4) ) ? \
( ( 0x70 == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xBF == ((const U8*)s)[0] ) ? \
- ( ( ( 0x63 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x65, 0x69 ) || 0x72 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ ( ( ( 0x63 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x65, 0x69) || 0x72 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xCA == ((const U8*)s)[0] ) ? \
- ( ( ( 0x4A == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x51, 0x52 ) ) ) ? 3 : 0 )\
-: ( ( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x72 == ((const U8*)s)[1] ) ) && ( 0x67 == ((const U8*)s)[2] ) ) && ( inRANGE(((const U8*)s)[3], 0x41, 0x47 ) ) ) ? 4 : 0 )
+ ( ( ( 0x4A == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x52) ) ) ? 3 : 0 )\
+: ( ( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x72 == ((const U8*)s)[1] ) ) && ( 0x67 == ((const U8*)s)[2] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x47) ) ) ? 4 : 0 )
/*** GENERATED CODE ***/
#define is_PROBLEMATIC_LOCALE_FOLD_cp(cp) \
( cp <= 0xFF || ( 0xFF < cp && \
-( 0x130 == cp || ( 0x130 < cp && \
-( 0x131 == cp || ( 0x131 < cp && \
+( inRANGE_helper_(UV, cp, 0x130, 0x131) || ( 0x131 < cp && \
( 0x149 == cp || ( 0x149 < cp && \
( 0x178 == cp || ( 0x178 < cp && \
( 0x17F == cp || ( 0x17F < cp && \
@@ -1390,10 +2324,9 @@
( 0x307 == cp || ( 0x307 < cp && \
( 0x39C == cp || ( 0x39C < cp && \
( 0x3BC == cp || ( 0x3BC < cp && \
-( inRANGE(cp, 0x1E96, 0x1E9A) || ( 0x1E9A < cp && \
+( inRANGE_helper_(UV, cp, 0x1E96, 0x1E9A) || ( 0x1E9A < cp && \
( 0x1E9E == cp || ( 0x1E9E < cp && \
-( 0x212A == cp || ( 0x212A < cp && \
-( 0x212B == cp || inRANGE(cp, 0xFB00, 0xFB06) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
+( inRANGE_helper_(UV, cp, 0x212A, 0x212B) || inRANGE_helper_(UV, cp, 0xFB00, 0xFB06) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
/*
PROBLEMATIC_LOCALE_FOLDEDS_START: The first folded character of folds which are problematic under locale
@@ -1402,30 +2335,29 @@
*/
/*** GENERATED CODE ***/
#define is_PROBLEMATIC_LOCALE_FOLDEDS_START_utf8(s) \
-( ( ( ((const U8*)s)[0] <= 0x40 ) || inRANGE(((const U8*)s)[0], 0x4B, 0x50 ) || inRANGE(((const U8*)s)[0], 0x5A, 0x61 ) || inRANGE(((const U8*)s)[0], 0x6B, 0x6F ) || inRANGE(((const U8*)s)[0], 0x79, 0x7F ) || inRANGE(((const U8*)s)[0], 0x81, 0x89 ) || inRANGE(((const U8*)s)[0], 0x91, 0x99 ) || inRANGE(((const U8*)s)[0], 0xA1, 0xA9 ) || 0xAD == ((const U8*)s)[0] || 0xBD == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0xC0, 0xC9 ) || inRANGE(((const U8*)s)[0], 0xD0, 0xD9 ) || 0xE0 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0xE2, 0xE9 ) || inRANGE(((const U8*)s)[0], 0xF0, 0xF9 ) || 0xFF == ((const U8*)s)[0] ) ? 1\
-: ( 0x80 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0x8A, 0x8B ) ) ?\
- ( ( inRANGE(((const U8*)s)[1], 0x41, 0x4A ) || inRANGE(((const U8*)s)[1], 0x51, 0x59 ) || inRANGE(((const U8*)s)[1], 0x62, 0x6A ) || inRANGE(((const U8*)s)[1], 0x70, 0x73 ) ) ? 2 : 0 )\
+( ( ( ((const U8*)s)[0] <= ' ' ) || inRANGE_helper_(U8, ((const U8*)s)[0], '.', '&') || inRANGE_helper_(U8, ((const U8*)s)[0], '!', '/') || inRANGE_helper_(U8, ((const U8*)s)[0], ',', '?') || inRANGE_helper_(U8, ((const U8*)s)[0], '`', '"') || inRANGE_helper_(U8, ((const U8*)s)[0], 'a', 'i') || inRANGE_helper_(U8, ((const U8*)s)[0], 'j', 'r') || inRANGE_helper_(U8, ((const U8*)s)[0], '~', 'z') || '[' == ((const U8*)s)[0] || ']' == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], '{', 'I') || inRANGE_helper_(U8, ((const U8*)s)[0], '}', 'R') || '\\' == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], 'S', 'Z') || inRANGE_helper_(U8, ((const U8*)s)[0], '0', '9') || 0xFF == ((const U8*)s)[0] ) ? 1\
+: ( 0x80 == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], 0x8A, 0x8B) ) ?\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x70, 0x73) ) ? 2 : 0 )\
: ( 0x8D == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0x57, 0x58 ) ) ? 2 : 0 ) \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x57, 0x58) ) ? 2 : 0 ) \
: ( 0x8E == ((const U8*)s)[0] ) ? \
( ( 0x4A == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0x8F == ((const U8*)s)[0] ) ? \
( ( 0x67 == ((const U8*)s)[1] || 0x73 == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0x9C == ((const U8*)s)[0] ) ? \
( ( 0x57 == ((const U8*)s)[1] ) ? 2 : 0 ) \
-: ( 0xAB == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0xB3, 0xB4 ) ) ?\
+: ( 0xAB == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], 0xB3, 0xB4) ) ?\
( ( 0x70 == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xBF == ((const U8*)s)[0] ) ? \
- ( ( ( 0x63 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x65, 0x69 ) || 0x72 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ ( ( ( 0x63 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x65, 0x69) || 0x72 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xCA == ((const U8*)s)[0] ) ? \
- ( ( ( 0x4A == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x51, 0x52 ) ) ) ? 3 : 0 )\
-: ( ( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x72 == ((const U8*)s)[1] ) ) && ( 0x67 == ((const U8*)s)[2] ) ) && ( inRANGE(((const U8*)s)[3], 0x41, 0x47 ) ) ) ? 4 : 0 )
+ ( ( ( 0x4A == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x52) ) ) ? 3 : 0 )\
+: ( ( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x72 == ((const U8*)s)[1] ) ) && ( 0x67 == ((const U8*)s)[2] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x47) ) ) ? 4 : 0 )
/*** GENERATED CODE ***/
#define is_PROBLEMATIC_LOCALE_FOLDEDS_START_cp(cp) \
( cp <= 0xFF || ( 0xFF < cp && \
-( 0x130 == cp || ( 0x130 < cp && \
-( 0x131 == cp || ( 0x131 < cp && \
+( inRANGE_helper_(UV, cp, 0x130, 0x131) || ( 0x131 < cp && \
( 0x149 == cp || ( 0x149 < cp && \
( 0x178 == cp || ( 0x178 < cp && \
( 0x17F == cp || ( 0x17F < cp && \
@@ -1433,10 +2365,9 @@
( 0x2BC == cp || ( 0x2BC < cp && \
( 0x39C == cp || ( 0x39C < cp && \
( 0x3BC == cp || ( 0x3BC < cp && \
-( inRANGE(cp, 0x1E96, 0x1E9A) || ( 0x1E9A < cp && \
+( inRANGE_helper_(UV, cp, 0x1E96, 0x1E9A) || ( 0x1E9A < cp && \
( 0x1E9E == cp || ( 0x1E9E < cp && \
-( 0x212A == cp || ( 0x212A < cp && \
-( 0x212B == cp || inRANGE(cp, 0xFB00, 0xFB06) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
+( inRANGE_helper_(UV, cp, 0x212A, 0x212B) || inRANGE_helper_(UV, cp, 0xFB00, 0xFB06) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
/*
PATWS: pattern white space
@@ -1446,23 +2377,12 @@
/*** GENERATED CODE ***/
#define is_PATWS_safe(s,e,is_utf8) \
( ( LIKELY((e) > (s)) ) ? \
- ( ( 0x05 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0x0B, 0x0D ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] || 0x40 == ((const U8*)s)[0] ) ? 1\
+ ( ( '\t' == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\r') || '\n' == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] || ' ' == ((const U8*)s)[0] ) ? 1\
: ( ( is_utf8 && LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) && ( 0xCA == ((const U8*)s)[0] ) ) ? ( ( 0x41 == ((const U8*)s)[1] ) ?\
- ( ( inRANGE(((const U8*)s)[2], 0x55, 0x56 ) ) ? 3 : 0 ) \
- : ( ( 0x42 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x49, 0x4A ) ) ) ? 3 : 0 ) : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x55, 0x56) ) ? 3 : 0 )\
+ : ( ( 0x42 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x49, 0x4A) ) ) ? 3 : 0 ) : 0 )\
: 0 )
-/*** GENERATED CODE ***/
-#define is_PATWS_cp(cp) \
-( 0x05 == cp || ( 0x05 < cp && \
-( inRANGE(cp, 0x0B, 0x0D) || ( 0x0D < cp && \
-( 0x15 == cp || ( 0x15 < cp && \
-( 0x25 == cp || ( 0x25 < cp && \
-( 0x40 == cp || ( 0x40 < cp && \
-( 0x200E == cp || ( 0x200E < cp && \
-( 0x200F == cp || ( 0x200F < cp && \
-( 0x2028 == cp || 0x2029 == cp ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
-
#endif /* EBCDIC 1047 */
#if 'A' == 193 /* EBCDIC 037 */ \
@@ -1478,44 +2398,44 @@
/*** GENERATED CODE ***/
#define is_LNBREAK_safe(s,e,is_utf8) \
( ((e)-(s) > 2) ? \
- ( ( inRANGE(((const U8*)s)[0], 0x0B, 0x0C ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
- : ( 0x0D == ((const U8*)s)[0] ) ? \
- ( ( 0x25 == ((const U8*)s)[1] ) ? 2 : 1 ) \
- : ( ( ( ( is_utf8 ) && ( 0xCA == ((const U8*)s)[0] ) ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0x49, 0x4A ) ) ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\f') || 0x15 == ((const U8*)s)[0] || '\n' == ((const U8*)s)[0] ) ? 1\
+ : ( '\r' == ((const U8*)s)[0] ) ? \
+ ( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 ) \
+ : ( ( ( ( is_utf8 ) && ( 0xCA == ((const U8*)s)[0] ) ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x49, 0x4A) ) ) ? 3 : 0 )\
: ((e)-(s) > 1) ? \
- ( ( inRANGE(((const U8*)s)[0], 0x0B, 0x0C ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
- : ( 0x0D == ((const U8*)s)[0] ) ? \
- ( ( 0x25 == ((const U8*)s)[1] ) ? 2 : 1 ) \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\f') || 0x15 == ((const U8*)s)[0] || '\n' == ((const U8*)s)[0] ) ? 1\
+ : ( '\r' == ((const U8*)s)[0] ) ? \
+ ( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 ) \
: 0 ) \
: ((e)-(s) > 0) ? \
- ( inRANGE(((const U8*)s)[0], 0x0B, 0x0D ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] )\
+ ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\r') || 0x15 == ((const U8*)s)[0] || '\n' == ((const U8*)s)[0] )\
: 0 )
/*** GENERATED CODE ***/
#define is_LNBREAK_utf8_safe(s,e) \
( ((e)-(s) > 2) ? \
- ( ( inRANGE(((const U8*)s)[0], 0x0B, 0x0C ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
- : ( 0x0D == ((const U8*)s)[0] ) ? \
- ( ( 0x25 == ((const U8*)s)[1] ) ? 2 : 1 ) \
- : ( ( ( 0xCA == ((const U8*)s)[0] ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0x49, 0x4A ) ) ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\f') || 0x15 == ((const U8*)s)[0] || '\n' == ((const U8*)s)[0] ) ? 1\
+ : ( '\r' == ((const U8*)s)[0] ) ? \
+ ( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 ) \
+ : ( ( ( 0xCA == ((const U8*)s)[0] ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x49, 0x4A) ) ) ? 3 : 0 )\
: ((e)-(s) > 1) ? \
- ( ( inRANGE(((const U8*)s)[0], 0x0B, 0x0C ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
- : ( 0x0D == ((const U8*)s)[0] ) ? \
- ( ( 0x25 == ((const U8*)s)[1] ) ? 2 : 1 ) \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\f') || 0x15 == ((const U8*)s)[0] || '\n' == ((const U8*)s)[0] ) ? 1\
+ : ( '\r' == ((const U8*)s)[0] ) ? \
+ ( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 ) \
: 0 ) \
: ((e)-(s) > 0) ? \
- ( inRANGE(((const U8*)s)[0], 0x0B, 0x0D ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] )\
+ ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\r') || 0x15 == ((const U8*)s)[0] || '\n' == ((const U8*)s)[0] )\
: 0 )
/*** GENERATED CODE ***/
#define is_LNBREAK_latin1_safe(s,e) \
( ((e)-(s) > 1) ? \
- ( ( inRANGE(((const U8*)s)[0], 0x0B, 0x0C ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
- : ( 0x0D == ((const U8*)s)[0] ) ? \
- ( ( 0x25 == ((const U8*)s)[1] ) ? 2 : 1 ) \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\f') || 0x15 == ((const U8*)s)[0] || '\n' == ((const U8*)s)[0] ) ? 1\
+ : ( '\r' == ((const U8*)s)[0] ) ? \
+ ( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 ) \
: 0 ) \
: ((e)-(s) > 0) ? \
- ( inRANGE(((const U8*)s)[0], 0x0B, 0x0D ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] )\
+ ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\r') || 0x15 == ((const U8*)s)[0] || '\n' == ((const U8*)s)[0] )\
: 0 )
/*
@@ -1529,7 +2449,7 @@
( ( ( 0x62 == ((const U8*)s)[1] ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xCA == ((const U8*)s)[0] ) ? \
( ( 0x41 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || 0x51 == ((const U8*)s)[2] ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || 0x51 == ((const U8*)s)[2] ) ? 3 : 0 )\
: ( 0x42 == ((const U8*)s)[1] ) ? \
( ( 0x56 == ((const U8*)s)[2] ) ? 3 : 0 ) \
: ( ( 0x43 == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
@@ -1538,7 +2458,7 @@
/*** GENERATED CODE ***/
#define is_HORIZWS_cp_high(cp) \
( 0x1680 == cp || ( 0x1680 < cp && \
-( inRANGE(cp, 0x2000, 0x200A) || ( 0x200A < cp && \
+( inRANGE_helper_(UV, cp, 0x2000, 0x200A) || ( 0x200A < cp && \
( 0x202F == cp || ( 0x202F < cp && \
( 0x205F == cp || 0x3000 == cp ) ) ) ) ) ) )
@@ -1549,11 +2469,11 @@
*/
/*** GENERATED CODE ***/
#define is_VERTWS_high(s) \
-( ( ( ( 0xCA == ((const U8*)s)[0] ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0x49, 0x4A ) ) ) ? 3 : 0 )
+( ( ( ( 0xCA == ((const U8*)s)[0] ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x49, 0x4A) ) ) ? 3 : 0 )
/*** GENERATED CODE ***/
#define is_VERTWS_cp_high(cp) \
-( 0x2028 == cp || 0x2029 == cp )
+( inRANGE_helper_(UV, cp, 0x2028, 0x2029) )
/*
XDIGIT: Hexadecimal digits
@@ -1563,13 +2483,13 @@
/*** GENERATED CODE ***/
#define is_XDIGIT_high(s) \
( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x72 == ((const U8*)s)[1] ) ) ? ( ( 0x66 == ((const U8*)s)[2] ) ?\
- ( ( inRANGE(((const U8*)s)[3], 0x57, 0x59 ) || 0x5F == ((const U8*)s)[3] || inRANGE(((const U8*)s)[3], 0x62, 0x67 ) ) ? 4 : 0 )\
- : ( ( inRANGE(((const U8*)s)[2], 0x67, 0x68 ) ) && ( inRANGE(((const U8*)s)[3], 0x42, 0x47 ) ) ) ? 4 : 0 ) : 0 )
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x57, 0x59) || 0x5F == ((const U8*)s)[3] || inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x67) ) ? 4 : 0 )\
+ : ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x67, 0x68) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x42, 0x47) ) ) ? 4 : 0 ) : 0 )
/*** GENERATED CODE ***/
#define is_XDIGIT_cp_high(cp) \
-( inRANGE(cp, 0xFF10, 0xFF19) || ( 0xFF19 < cp && \
-( inRANGE(cp, 0xFF21, 0xFF26) || inRANGE(cp, 0xFF41, 0xFF46) ) ) )
+( inRANGE_helper_(UV, cp, 0xFF10, 0xFF19) || ( 0xFF19 < cp && \
+( inRANGE_helper_(UV, cp, 0xFF21, 0xFF26) || inRANGE_helper_(UV, cp, 0xFF41, 0xFF46) ) ) )
/*
XPERLSPACE: \p{XPerlSpace}
@@ -1582,20 +2502,19 @@
( ( ( 0x62 == ((const U8*)s)[1] ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xCA == ((const U8*)s)[0] ) ? \
( ( 0x41 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || 0x51 == ((const U8*)s)[2] ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || 0x51 == ((const U8*)s)[2] ) ? 3 : 0 )\
: ( 0x42 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x49, 0x4A ) || 0x56 == ((const U8*)s)[2] ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x49, 0x4A) || 0x56 == ((const U8*)s)[2] ) ? 3 : 0 )\
: ( ( 0x43 == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( ( ( 0xCE == ((const U8*)s)[0] ) && ( 0x41 == ((const U8*)s)[1] ) ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )
/*** GENERATED CODE ***/
#define is_XPERLSPACE_cp_high(cp) \
( 0x1680 == cp || ( 0x1680 < cp && \
-( inRANGE(cp, 0x2000, 0x200A) || ( 0x200A < cp && \
-( 0x2028 == cp || ( 0x2028 < cp && \
-( 0x2029 == cp || ( 0x2029 < cp && \
+( inRANGE_helper_(UV, cp, 0x2000, 0x200A) || ( 0x200A < cp && \
+( inRANGE_helper_(UV, cp, 0x2028, 0x2029) || ( 0x2029 < cp && \
( 0x202F == cp || ( 0x202F < cp && \
-( 0x205F == cp || 0x3000 == cp ) ) ) ) ) ) ) ) ) ) )
+( 0x205F == cp || 0x3000 == cp ) ) ) ) ) ) ) ) )
/*
NONCHAR: Non character code points
@@ -1607,16 +2526,16 @@
( ( ( LIKELY((e) > (s)) ) && ( LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) ) ? ( ( 0xDD == ((const U8*)s)[0] ) ?\
( ( 0x72 == ((const U8*)s)[1] ) ? \
( ( 0x55 == ((const U8*)s)[2] ) ? \
- ( ( inRANGE(((const U8*)s)[3], 0x57, 0x59 ) || 0x5F == ((const U8*)s)[3] || inRANGE(((const U8*)s)[3], 0x62, 0x6A ) || inRANGE(((const U8*)s)[3], 0x70, 0x72 ) ) ? 4 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x57, 0x59) || 0x5F == ((const U8*)s)[3] || inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x70, 0x72) ) ? 4 : 0 )\
: ( 0x56 == ((const U8*)s)[2] ) ? \
- ( ( inRANGE(((const U8*)s)[3], 0x41, 0x4A ) || inRANGE(((const U8*)s)[3], 0x51, 0x56 ) ) ? 4 : 0 )\
- : ( ( 0x72 == ((const U8*)s)[2] ) && ( inRANGE(((const U8*)s)[3], 0x71, 0x72 ) ) ) ? 4 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x51, 0x56) ) ? 4 : 0 )\
+ : ( ( 0x72 == ((const U8*)s)[2] ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x71, 0x72) ) ) ? 4 : 0 )\
: 0 ) \
: ( 0xDF == ((const U8*)s)[0] || 0xEA == ((const U8*)s)[0] || 0xEC == ((const U8*)s)[0] ) ?\
- ( ( ( ( 0x72 == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) && ( inRANGE(((const U8*)s)[3], 0x71, 0x72 ) ) ) ? 4 : 0 )\
+ ( ( ( ( 0x72 == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x71, 0x72) ) ) ? 4 : 0 )\
: ( 0xED == ((const U8*)s)[0] ) ? \
- ( ( ( ( ( ((const U8*)s)[1] == 0x4A || ((const U8*)s)[1] == 0x52 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x54 ) || ((const U8*)s)[1] == 0x58 || ((const U8*)s)[1] == 0x5F || ((const U8*)s)[1] == 0x63 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x65 ) || ((const U8*)s)[1] == 0x69 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x70 ) ) && ( 0x72 == ((const U8*)s)[2] ) ) && ( 0x72 == ((const U8*)s)[3] ) ) && ( inRANGE(((const U8*)s)[4], 0x71, 0x72 ) ) ) ? 5 : 0 )\
- : ( ( ( ( ( 0xEE == ((const U8*)s)[0] ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( 0x72 == ((const U8*)s)[2] ) ) && ( 0x72 == ((const U8*)s)[3] ) ) && ( inRANGE(((const U8*)s)[4], 0x71, 0x72 ) ) ) ? 5 : 0 ) : 0 )
+ ( ( ( ( ( ((const U8*)s)[1] == 0x4A || ((const U8*)s)[1] == 0x52 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x54 ) || ((const U8*)s)[1] == 0x58 || ((const U8*)s)[1] == 0x5F || ((const U8*)s)[1] == 0x63 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x65 ) || ((const U8*)s)[1] == 0x69 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x70 ) ) && ( 0x72 == ((const U8*)s)[2] ) ) && ( 0x72 == ((const U8*)s)[3] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[4], 0x71, 0x72) ) ) ? 5 : 0 )\
+ : ( ( ( ( ( 0xEE == ((const U8*)s)[0] ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( 0x72 == ((const U8*)s)[2] ) ) && ( 0x72 == ((const U8*)s)[3] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[4], 0x71, 0x72) ) ) ? 5 : 0 ) : 0 )
/*
SURROGATE: Surrogate code points
@@ -1625,7 +2544,7 @@
*/
/*** GENERATED CODE ***/
#define is_SURROGATE_utf8_safe(s,e) \
-( ( ( ( ( ( ((e) - (s)) >= 4 ) && ( 0xDD == ((const U8*)s)[0] ) ) && ( inRANGE(((const U8*)s)[1], 0x64, 0x65 ) ) ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x72 ) ) ) && ( inRANGE(((const U8*)s)[3], 0x41, 0x4A ) || inRANGE(((const U8*)s)[3], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[3] || inRANGE(((const U8*)s)[3], 0x62, 0x6A ) || inRANGE(((const U8*)s)[3], 0x70, 0x72 ) ) ) ? 4 : 0 )
+( ( ( ( ( ( ((e) - (s)) >= 4 ) && ( 0xDD == ((const U8*)s)[0] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x64, 0x65) ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || 0x5F == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x72) ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x51, 0x59) || 0x5F == ((const U8*)s)[3] || inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x70, 0x72) ) ) ? 4 : 0 )
/*
QUOTEMETA: Meta-characters that \Q should quote
@@ -1633,65 +2552,55 @@
\p{_Perl_Quotemeta}
*/
/*** GENERATED CODE ***/
-#define is_QUOTEMETA_high_part0(s) \
-( ( 0x51 == ((const U8*)s)[1] ) ? \
- ( ( 0x72 == ((const U8*)s)[2] ) ? 3 : 0 ) \
- : ( ( 0x52 == ((const U8*)s)[1] ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )
-
-
-/*** GENERATED CODE ***/
-#define is_QUOTEMETA_high_part1(s) \
-( ( 0xBD == ((const U8*)s)[0] ) ? \
- ( ( 0x62 == ((const U8*)s)[1] ) ? \
- ( ( 0x41 == ((const U8*)s)[2] ) ? 3 : 0 ) \
- : ( ( 0x70 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x62, 0x63 ) ) ) ? 3 : 0 )\
-: ( 0xBE == ((const U8*)s)[0] ) ? \
- ( ( ( 0x41 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x52, 0x55 ) ) ) ? 3 : 0 )\
-: ( 0xCA == ((const U8*)s)[0] ) ? \
- ( ( 0x41 == ((const U8*)s)[1] || inRANGE(((const U8*)s)[1], 0x54, 0x59 ) || 0x5F == ((const U8*)s)[1] || inRANGE(((const U8*)s)[1], 0x62, 0x6A ) || inRANGE(((const U8*)s)[1], 0x70, 0x72 ) ) ?\
- ( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x72 ) ) ? 3 : 0 )\
+#define is_QUOTEMETA_high_part0_(s) \
+( ( 0x41 == ((const U8*)s)[1] || inRANGE_helper_(U8, ((const U8*)s)[1], 0x54, 0x59) || 0x5F == ((const U8*)s)[1] || inRANGE_helper_(U8, ((const U8*)s)[1], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x70, 0x72) ) ?\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || 0x5F == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x72) ) ? 3 : 0 )\
: ( 0x42 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x71 ) ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || 0x5F == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x71) ) ? 3 : 0 )\
: ( 0x43 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x42, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x63, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x72 ) ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x42, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || 0x5F == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x63, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x72) ) ? 3 : 0 )\
: ( 0x44 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x56 ) ) ? 3 : 0 )\
- : ( ( 0x53 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x57, 0x59 ) || 0x5F == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x72 ) ) ) ? 3 : 0 )\
-: ( 0xCB == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0x41, 0x43 ) || inRANGE(((const U8*)s)[1], 0x49, 0x4A ) || inRANGE(((const U8*)s)[1], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[1] || inRANGE(((const U8*)s)[1], 0x62, 0x68 ) || inRANGE(((const U8*)s)[1], 0x70, 0x72 ) ) ?\
- ( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x72 ) ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x56) ) ? 3 : 0 )\
+ : ( ( 0x53 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x57, 0x59) || 0x5F == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x72) ) ) ? 3 : 0 )
+
+
+/*** GENERATED CODE ***/
+#define is_QUOTEMETA_high_part1_(s) \
+( ( 0xCB == ((const U8*)s)[0] ) ? \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x41, 0x43) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x49, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x51, 0x59) || 0x5F == ((const U8*)s)[1] || inRANGE_helper_(U8, ((const U8*)s)[1], 0x62, 0x68) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x70, 0x72) ) ?\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || 0x5F == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x72) ) ? 3 : 0 )\
: ( 0x69 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x62, 0x63 ) ) ? 3 : 0 )\
- : ( ( 0x6A == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x72 ) ) ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || 0x5F == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x63) ) ? 3 : 0 )\
+ : ( ( 0x6A == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x72) ) ) ? 3 : 0 )\
: ( 0xCC == ((const U8*)s)[0] ) ? \
- ( ( ( inRANGE(((const U8*)s)[1], 0x41, 0x4A ) || inRANGE(((const U8*)s)[1], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[1] || inRANGE(((const U8*)s)[1], 0x62, 0x6A ) || inRANGE(((const U8*)s)[1], 0x70, 0x72 ) ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x72 ) ) ) ? 3 : 0 )\
+ ( ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x51, 0x59) || 0x5F == ((const U8*)s)[1] || inRANGE_helper_(U8, ((const U8*)s)[1], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x70, 0x72) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || 0x5F == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x72) ) ) ? 3 : 0 )\
: ( 0xCD == ((const U8*)s)[0] ) ? \
- ( ( ( inRANGE(((const U8*)s)[1], 0x57, 0x59 ) || 0x5F == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x72 ) ) ) ? 3 : 0 )\
+ ( ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x57, 0x59) || 0x5F == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || 0x5F == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x72) ) ) ? 3 : 0 )\
: ( 0xCE == ((const U8*)s)[0] ) ? \
( ( 0x41 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x41, 0x44 ) || inRANGE(((const U8*)s)[2], 0x49, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x72 ) ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x44) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x49, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || 0x5F == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x72) ) ? 3 : 0 )\
: ( 0x42 == ((const U8*)s)[1] ) ? \
( ( 0x41 == ((const U8*)s)[2] || 0x57 == ((const U8*)s)[2] ) ? 3 : 0 )\
: ( ( 0x52 == ((const U8*)s)[1] ) && ( 0x45 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xDD == ((const U8*)s)[0] ) ? \
( ( 0x72 == ((const U8*)s)[1] ) ? \
( ( 0x4A == ((const U8*)s)[2] ) ? \
- ( ( inRANGE(((const U8*)s)[3], 0x71, 0x72 ) ) ? 4 : 0 ) \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x71, 0x72) ) ? 4 : 0 )\
: ( 0x57 == ((const U8*)s)[2] ) ? \
- ( ( inRANGE(((const U8*)s)[3], 0x41, 0x4A ) || inRANGE(((const U8*)s)[3], 0x51, 0x56 ) ) ? 4 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x51, 0x56) ) ? 4 : 0 )\
: ( 0x59 == ((const U8*)s)[2] ) ? \
- ( ( inRANGE(((const U8*)s)[3], 0x46, 0x47 ) ) ? 4 : 0 ) \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x46, 0x47) ) ? 4 : 0 )\
: ( 0x65 == ((const U8*)s)[2] ) ? \
( ( 0x72 == ((const U8*)s)[3] ) ? 4 : 0 ) \
: ( 0x70 == ((const U8*)s)[2] ) ? \
( ( 0x41 == ((const U8*)s)[3] ) ? 4 : 0 ) \
- : ( ( 0x72 == ((const U8*)s)[2] ) && ( inRANGE(((const U8*)s)[3], 0x57, 0x59 ) || 0x5F == ((const U8*)s)[3] || inRANGE(((const U8*)s)[3], 0x62, 0x66 ) ) ) ? 4 : 0 )\
+ : ( ( 0x72 == ((const U8*)s)[2] ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x57, 0x59) || 0x5F == ((const U8*)s)[3] || inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x66) ) ) ? 4 : 0 )\
: 0 ) \
: ( 0xDF == ((const U8*)s)[0] ) ? \
( ( 0x56 == ((const U8*)s)[1] ) ? \
- ( ( ( 0x46 == ((const U8*)s)[2] ) && ( inRANGE(((const U8*)s)[3], 0x41, 0x44 ) ) ) ? 4 : 0 )\
- : ( ( ( 0x62 == ((const U8*)s)[1] ) && ( 0x52 == ((const U8*)s)[2] ) ) && ( 0x5F == ((const U8*)s)[3] || inRANGE(((const U8*)s)[3], 0x62, 0x68 ) ) ) ? 4 : 0 )\
-: ( ( ( ( ( 0xED == ((const U8*)s)[0] ) && ( 0x6A == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x44 ) ) ) && ( inRANGE(((const U8*)s)[3], 0x41, 0x4A ) || inRANGE(((const U8*)s)[3], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[3] || inRANGE(((const U8*)s)[3], 0x62, 0x6A ) || inRANGE(((const U8*)s)[3], 0x70, 0x72 ) ) ) && ( inRANGE(((const U8*)s)[4], 0x41, 0x4A ) || inRANGE(((const U8*)s)[4], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[4] || inRANGE(((const U8*)s)[4], 0x62, 0x6A ) || inRANGE(((const U8*)s)[4], 0x70, 0x72 ) ) ) ? 5 : 0 )
+ ( ( ( 0x46 == ((const U8*)s)[2] ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x44) ) ) ? 4 : 0 )\
+ : ( ( ( 0x62 == ((const U8*)s)[1] ) && ( 0x52 == ((const U8*)s)[2] ) ) && ( 0x5F == ((const U8*)s)[3] || inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x68) ) ) ? 4 : 0 )\
+: ( ( ( ( ( 0xED == ((const U8*)s)[0] ) && ( 0x6A == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x44) ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x51, 0x59) || 0x5F == ((const U8*)s)[3] || inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x70, 0x72) ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[4], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[4], 0x51, 0x59) || 0x5F == ((const U8*)s)[4] || inRANGE_helper_(U8, ((const U8*)s)[4], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[4], 0x70, 0x72) ) ) ? 5 : 0 )
/*** GENERATED CODE ***/
@@ -1700,38 +2609,48 @@
( ( 0x56 == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xB7 == ((const U8*)s)[0] ) ? \
( ( ( 0x57 == ((const U8*)s)[1] ) && ( 0x6A == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-: ( 0xBC == ((const U8*)s)[0] ) ? is_QUOTEMETA_high_part0(s) : is_QUOTEMETA_high_part1(s) )
+: ( 0xBC == ((const U8*)s)[0] ) ? \
+ ( ( 0x51 == ((const U8*)s)[1] ) ? \
+ ( ( 0x72 == ((const U8*)s)[2] ) ? 3 : 0 ) \
+ : ( ( 0x52 == ((const U8*)s)[1] ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+: ( 0xBD == ((const U8*)s)[0] ) ? \
+ ( ( 0x62 == ((const U8*)s)[1] ) ? \
+ ( ( 0x41 == ((const U8*)s)[2] ) ? 3 : 0 ) \
+ : ( ( 0x70 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x63) ) ) ? 3 : 0 )\
+: ( 0xBE == ((const U8*)s)[0] ) ? \
+ ( ( ( 0x41 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x52, 0x55) ) ) ? 3 : 0 )\
+: ( 0xCA == ((const U8*)s)[0] ) ? is_QUOTEMETA_high_part0_(s) : is_QUOTEMETA_high_part1_(s) )
/*
MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
- &regcharclass_multi_char_folds::multi_char_folds('u', 'a')
+ %regcharclass_multi_char_folds::multi_char_folds('u', 'a')
*/
/*** GENERATED CODE ***/
-#define is_MULTI_CHAR_FOLD_utf8_safe_part0(s,e) \
-( ( 0x86 == ((const U8*)s)[1] ) ? \
- ( ( 0x89 == ((const U8*)s)[2] || 0x93 == ((const U8*)s)[2] ) ? 3 : 2 )\
- : ( 0x89 == ((const U8*)s)[1] || 0x93 == ((const U8*)s)[1] ) ? 2 : 0 )
+#define is_MULTI_CHAR_FOLD_utf8_safe_part0_(s,e) \
+( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 3 : 0 )
/*** GENERATED CODE ***/
-#define is_MULTI_CHAR_FOLD_utf8_safe_part1(s,e) \
-( ( 0x88 == ((const U8*)s)[0] ) ? \
- ( ( ( 0xAE == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x89 == ((const U8*)s)[0] ) ? \
- ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x8E == ((const U8*)s)[0] ) ? \
- ( ( ( ( 0x72 == ((const U8*)s)[1] ) && ( 0x8E == ((const U8*)s)[2] ) ) && ( 0x72 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
- : ( 0x91 == ((const U8*)s)[0] ) ? \
+#define is_MULTI_CHAR_FOLD_utf8_safe_part1_(s,e) \
+( ( 0x8E == ((const U8*)s)[0] ) ? \
+ ( ( 0x72 == ((const U8*)s)[1] ) ? \
+ ( ( 0x8E == ((const U8*)s)[2] ) ? \
+ ( ( 0x72 == ((const U8*)s)[3] ) ? 4 : 0 ) \
+ : ( ( ((const U8*)s)[2] & 0xBE ) == 's' ) ? 3 : 0 ) \
+ : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ? \
( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0xA2 == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0xA2, 0xA3 ) ) ? 2 : 0 ) \
- : ( 0xA3 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ? \
+ ( ( 0x8E == ((const U8*)s)[1] ) ? \
+ ( ( 0x72 == ((const U8*)s)[2] ) ? 3 : 0 ) \
+ : ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ? 2 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ? \
( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0xA6 == ((const U8*)s)[0] || 0xA8 == ((const U8*)s)[0] ) ? \
+ : ( ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ?\
( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xAA == ((const U8*)s)[0] ) ? \
- ( ( ( 0x6A == ((const U8*)s)[1] ) && ( 0x95 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ ( ( ( 0x6A == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 3 : 0 )\
: ( 0xB3 == ((const U8*)s)[0] ) ? \
( ( 0x53 == ((const U8*)s)[1] || 0x55 == ((const U8*)s)[1] ) ? \
( ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
@@ -1745,7 +2664,7 @@
( ( 0xAD == ((const U8*)s)[2] ) ? \
( ( 0x49 == ((const U8*)s)[3] ) ? \
( ( 0xAD == ((const U8*)s)[4] ) ? \
- ( ( inRANGE(((const U8*)s)[5], 0x41, 0x42 ) ) ? 6 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x41, 0x42) ) ? 6 : 0 )\
: ( ( 0xAF == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
: 0 ) \
: ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
@@ -1757,11 +2676,11 @@
( ( 0xAD == ((const U8*)s)[2] ) ? \
( ( 0x49 == ((const U8*)s)[3] ) ? \
( ( 0xAD == ((const U8*)s)[4] ) ? \
- ( ( inRANGE(((const U8*)s)[5], 0x41, 0x42 ) ) ? 6 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x41, 0x42) ) ? 6 : 0 )\
: ( ( 0xAF == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
: ( 0x5F == ((const U8*)s)[3] ) ? \
( ( 0xAD == ((const U8*)s)[4] ) ? \
- ( ( inRANGE(((const U8*)s)[5], 0x41, 0x42 ) ) ? 6 : 4 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x41, 0x42) ) ? 6 : 4 )\
: ( ( 0xAF == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 6 : 4 )\
: 0 ) \
: ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
@@ -1781,36 +2700,42 @@
: ( ( ( ( 0x71 == ((const U8*)s)[2] ) && ( 0xB7 == ((const U8*)s)[3] ) ) && ( 0x52 == ((const U8*)s)[4] ) ) && ( 0x64 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
: 0 ) \
: ( 0xBF == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0x66, 0x67 ) ) ? \
- ( ( ( ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
- : ( ( ( ( 0x69 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) || 0x57 == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || 0x6A == ((const U8*)s)[2] ) ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x66, 0x67) ) ? \
+ ( ( ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
+ : ( ( ( ( 0x69 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) || 0x57 == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || 0x6A == ((const U8*)s)[2] ) ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
: 0 )
/*** GENERATED CODE ***/
-#define is_MULTI_CHAR_FOLD_utf8_safe_part2(s,e) \
-( ( 0x81 == ((const U8*)s)[0] ) ? \
+#define is_MULTI_CHAR_FOLD_utf8_safe_part2_(s,e) \
+( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ? \
( ( ( 0xAA == ((const U8*)s)[1] ) && ( 0x71 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x86 == ((const U8*)s)[0] ) ? \
- ( ( 0x86 == ((const U8*)s)[1] ) ? \
- ( ( 0x89 == ((const U8*)s)[2] || 0x93 == ((const U8*)s)[2] ) ? 3 : 2 )\
- : ( 0x89 == ((const U8*)s)[1] || 0x93 == ((const U8*)s)[1] ) ? 2 : 0 )\
- : ( 0x88 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? \
+ ( ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ? 3 : 2 )\
+ : ( ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ? \
( ( ( 0xAE == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x89 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ? \
( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0x8E == ((const U8*)s)[0] ) ? \
- ( ( ( ( 0x72 == ((const U8*)s)[1] ) && ( 0x8E == ((const U8*)s)[2] ) ) && ( 0x72 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
- : ( 0x91 == ((const U8*)s)[0] ) ? \
+ ( ( 0x72 == ((const U8*)s)[1] ) ? \
+ ( ( 0x8E == ((const U8*)s)[2] ) ? \
+ ( ( 0x72 == ((const U8*)s)[3] ) ? 4 : 0 ) \
+ : ( ( ((const U8*)s)[2] & 0xBE ) == 's' ) ? 3 : 0 ) \
+ : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ? \
( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0xA2 == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0xA2, 0xA3 ) ) ? 2 : 0 ) \
- : ( 0xA3 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ? \
+ ( ( 0x8E == ((const U8*)s)[1] ) ? \
+ ( ( 0x72 == ((const U8*)s)[2] ) ? 3 : 0 ) \
+ : ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ? 2 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ? \
( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0xA6 == ((const U8*)s)[0] || 0xA8 == ((const U8*)s)[0] ) ? \
+ : ( ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ?\
( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xAA == ((const U8*)s)[0] ) ? \
- ( ( ( 0x6A == ((const U8*)s)[1] ) && ( 0x95 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ ( ( ( 0x6A == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 3 : 0 )\
: ( 0xB3 == ((const U8*)s)[0] ) ? \
( ( 0x53 == ((const U8*)s)[1] || 0x55 == ((const U8*)s)[1] ) ? \
( ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
@@ -1832,37 +2757,43 @@
: ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
: ( ( ( 0x55 == ((const U8*)s)[1] ) && ( 0xB3 == ((const U8*)s)[2] ) ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
: ( 0xBF == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0x66, 0x67 ) ) ? \
- ( ( ( ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
- : ( ( ( ( 0x69 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) || 0x57 == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || 0x6A == ((const U8*)s)[2] ) ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x66, 0x67) ) ? \
+ ( ( ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
+ : ( ( ( ( 0x69 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) || 0x57 == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || 0x6A == ((const U8*)s)[2] ) ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
: 0 )
/*** GENERATED CODE ***/
-#define is_MULTI_CHAR_FOLD_utf8_safe_part3(s,e) \
+#define is_MULTI_CHAR_FOLD_utf8_safe_part3_(s,e) \
( ((e)-(s) > 3) ? \
- ( ( 0x81 == ((const U8*)s)[0] ) ? \
+ ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ? \
( ( ( 0xAA == ((const U8*)s)[1] ) && ( 0x71 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x86 == ((const U8*)s)[0] ) ? \
- ( ( 0x86 == ((const U8*)s)[1] ) ? \
- ( ( 0x89 == ((const U8*)s)[2] || 0x93 == ((const U8*)s)[2] ) ? 3 : 2 )\
- : ( 0x89 == ((const U8*)s)[1] || 0x93 == ((const U8*)s)[1] ) ? 2 : 0 )\
- : ( 0x88 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? \
+ ( ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ? 3 : 2 )\
+ : ( ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ? \
( ( ( 0xAE == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x89 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ? \
( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0x8E == ((const U8*)s)[0] ) ? \
- ( ( ( ( 0x72 == ((const U8*)s)[1] ) && ( 0x8E == ((const U8*)s)[2] ) ) && ( 0x72 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
- : ( 0x91 == ((const U8*)s)[0] ) ? \
+ ( ( 0x72 == ((const U8*)s)[1] ) ? \
+ ( ( 0x8E == ((const U8*)s)[2] ) ? \
+ ( ( 0x72 == ((const U8*)s)[3] ) ? 4 : 0 ) \
+ : ( ( ((const U8*)s)[2] & 0xBE ) == 's' ) ? 3 : 0 ) \
+ : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ? \
( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0xA2 == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0xA2, 0xA3 ) ) ? 2 : 0 ) \
- : ( 0xA3 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ? \
+ ( ( 0x8E == ((const U8*)s)[1] ) ? \
+ ( ( 0x72 == ((const U8*)s)[2] ) ? 3 : 0 ) \
+ : ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ? 2 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ? \
( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0xA6 == ((const U8*)s)[0] || 0xA8 == ((const U8*)s)[0] ) ? \
+ : ( ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ?\
( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xAA == ((const U8*)s)[0] ) ? \
- ( ( ( 0x6A == ((const U8*)s)[1] ) && ( 0x95 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ ( ( ( 0x6A == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 3 : 0 )\
: ( 0xB3 == ((const U8*)s)[0] ) ? \
( ( 0x53 == ((const U8*)s)[1] || 0x55 == ((const U8*)s)[1] ) ? \
( ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
@@ -1885,104 +2816,551 @@
: ( ( ( 0x55 == ((const U8*)s)[1] ) && ( 0xB3 == ((const U8*)s)[2] ) ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
: 0 ) \
: ((e)-(s) > 2) ? \
- ( ( 0x81 == ((const U8*)s)[0] ) ? \
+ ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ? \
( ( ( 0xAA == ((const U8*)s)[1] ) && ( 0x71 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x86 == ((const U8*)s)[0] ) ? \
- ( ( 0x86 == ((const U8*)s)[1] ) ? \
- ( ( 0x89 == ((const U8*)s)[2] || 0x93 == ((const U8*)s)[2] ) ? 3 : 2 )\
- : ( 0x89 == ((const U8*)s)[1] || 0x93 == ((const U8*)s)[1] ) ? 2 : 0 )\
- : ( 0x88 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? \
+ ( ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ? 3 : 2 )\
+ : ( ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ? \
( ( ( 0xAE == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x89 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ? \
( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x91 == ((const U8*)s)[0] ) ? \
+ : ( 0x8E == ((const U8*)s)[0] ) ? \
+ ( ( ( 0x72 == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBE ) == 's' ) ) ? 3 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ? \
( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0xA2 == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0xA2, 0xA3 ) ) ? 2 : 0 ) \
- : ( 0xA3 == ((const U8*)s)[0] ) ? \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ? \
+ ( ( 0x8E == ((const U8*)s)[1] ) ? \
+ ( ( 0x72 == ((const U8*)s)[2] ) ? 3 : 0 ) \
+ : ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ? 2 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ? \
( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0xA6 == ((const U8*)s)[0] || 0xA8 == ((const U8*)s)[0] ) ? \
+ : ( ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ?\
( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( ( ( 0xAA == ((const U8*)s)[0] ) && ( 0x6A == ((const U8*)s)[1] ) ) && ( 0x95 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ : ( ( ( 0xAA == ((const U8*)s)[0] ) && ( 0x6A == ((const U8*)s)[1] ) ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 3 : 0 )\
: ((e)-(s) > 1) ? \
- ( ( 0x86 == ((const U8*)s)[0] ) ? \
- ( ( 0x86 == ((const U8*)s)[1] || 0x89 == ((const U8*)s)[1] || 0x93 == ((const U8*)s)[1] ) ? 2 : 0 )\
- : ( ( 0xA2 == ((const U8*)s)[0] ) && ( inRANGE(((const U8*)s)[1], 0xA2, 0xA3 ) ) ) ? 2 : 0 )\
+ ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+ : ( ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) && ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ) ? 2 : 0 )\
: 0 )
/*** GENERATED CODE ***/
#define is_MULTI_CHAR_FOLD_utf8_safe(s,e) \
( ((e)-(s) > 5) ? \
- ( ( 0x81 == ((const U8*)s)[0] ) ? \
+ ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ? \
( ( ( 0xAA == ((const U8*)s)[1] ) && ( 0x71 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
- : ( 0x86 == ((const U8*)s)[0] ) ? is_MULTI_CHAR_FOLD_utf8_safe_part0(s,e) : is_MULTI_CHAR_FOLD_utf8_safe_part1(s,e) )\
-: ((e)-(s) > 4) ? is_MULTI_CHAR_FOLD_utf8_safe_part2(s,e) : is_MULTI_CHAR_FOLD_utf8_safe_part3(s,e) )
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? \
+ ( ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ? 3 : 2 )\
+ : ( ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ? \
+ ( ( ( 0xAE == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ? is_MULTI_CHAR_FOLD_utf8_safe_part0_(s,e) : is_MULTI_CHAR_FOLD_utf8_safe_part1_(s,e) )\
+: ((e)-(s) > 4) ? is_MULTI_CHAR_FOLD_utf8_safe_part2_(s,e) : is_MULTI_CHAR_FOLD_utf8_safe_part3_(s,e) )
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part0_(s,e) \
+( ( 0x52 == ((const U8*)s)[1] ) ? \
+ ( ( 0x46 == ((const U8*)s)[2] ) ? \
+ ( ( ( ( 0xB7 == ((const U8*)s)[3] ) && ( 0x53 == ((const U8*)s)[4] ) ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 0x587 : 0 )\
+ : ( 0x62 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB7 == ((const U8*)s)[3] ) && ( 0x52 == ((const U8*)s)[4] ) ) ? ( ( 0x46 == ((const U8*)s)[5] ) ? 0xFB14\
+ : ( 0x52 == ((const U8*)s)[5] ) ? 0xFB15 \
+ : ( 0x54 == ((const U8*)s)[5] ) ? 0xFB17 \
+ : ( 0x64 == ((const U8*)s)[5] ) ? 0xFB13 : 0 ) : 0 )\
+ : ( ( ( ( 0x71 == ((const U8*)s)[2] ) && ( 0xB7 == ((const U8*)s)[3] ) ) && ( 0x52 == ((const U8*)s)[4] ) ) && ( 0x64 == ((const U8*)s)[5] ) ) ? 0xFB16 : 0 )\
+ : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part1_(s,e) \
+( ( 0xBF == ((const U8*)s)[0] ) ? \
+ ( ( 0x66 == ((const U8*)s)[1] ) ? \
+ ( ( 0x41 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F80 : 0 )\
+ : ( 0x42 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F81 : 0 )\
+ : ( 0x43 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F82 : 0 )\
+ : ( 0x44 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F83 : 0 )\
+ : ( 0x45 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F84 : 0 )\
+ : ( 0x46 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F85 : 0 )\
+ : ( 0x47 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F86 : 0 )\
+ : ( ( ( 0x48 == ((const U8*)s)[2] ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F87 : 0 )\
+ : ( 0x67 == ((const U8*)s)[1] ) ? \
+ ( ( 0x41 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F90 : 0 )\
+ : ( 0x42 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F91 : 0 )\
+ : ( 0x43 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F92 : 0 )\
+ : ( 0x44 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F93 : 0 )\
+ : ( 0x45 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F94 : 0 )\
+ : ( 0x46 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F95 : 0 )\
+ : ( 0x47 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F96 : 0 )\
+ : ( ( ( 0x48 == ((const U8*)s)[2] ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F97 : 0 )\
+ : ( 0x69 == ((const U8*)s)[1] ) ? \
+ ( ( 0x41 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA0 : 0 )\
+ : ( 0x42 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA1 : 0 )\
+ : ( 0x43 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA2 : 0 )\
+ : ( 0x44 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA3 : 0 )\
+ : ( 0x45 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA4 : 0 )\
+ : ( 0x46 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA5 : 0 )\
+ : ( 0x47 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA6 : 0 )\
+ : ( 0x48 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA7 : 0 )\
+ : ( 0x57 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FB2 : 0 )\
+ : ( 0x62 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FC2 : 0 )\
+ : ( ( ( 0x6A == ((const U8*)s)[2] ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FF2 : 0 )\
+ : 0 ) \
+ : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part2_(s,e) \
+( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03 \
+ : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 ) \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part3_(s,e) \
+( ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ? \
+ ( ( ( 0xAE == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ? \
+ ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+ : ( 0x8E == ((const U8*)s)[0] ) ? \
+ ( ( 0x72 == ((const U8*)s)[1] ) ? \
+ ( ( 0x8E == ((const U8*)s)[2] ) ? \
+ ( ( 0x72 == ((const U8*)s)[3] ) ? 0x59 : 0 ) \
+ : ( ( ((const U8*)s)[2] & 0xBF ) == 's' ) ? 0x59 \
+ : ( ( ((const U8*)s)[2] & 0xBF ) == 't' ) ? 0xFB05 : 0 ) \
+ : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ? \
+ ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ? \
+ ( ( 0x8E == ((const U8*)s)[1] ) ? \
+ ( ( 0x72 == ((const U8*)s)[2] ) ? 0x59 : 0 ) \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ? \
+ ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) ? \
+ ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ? \
+ ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+ : ( 0xAA == ((const U8*)s)[0] ) ? \
+ ( ( ( 0x6A == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 0x149 : 0 )\
+ : ( 0xB3 == ((const U8*)s)[0] ) ? \
+ ( ( 0x53 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FB4 : 0 )\
+ : ( 0x55 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FC4 : 0 )\
+ : ( 0x58 == ((const U8*)s)[1] ) ? \
+ ( ( 0xAF == ((const U8*)s)[2] ) ? \
+ ( ( 0x43 == ((const U8*)s)[3] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[4] ) && ( 0x67 == ((const U8*)s)[5] ) ) ? 0x1FB7 : 0x1FB6 )\
+ : 0 ) \
+ : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FB3 : 0 )\
+ : ( 0x65 == ((const U8*)s)[1] ) ? \
+ ( ( 0xAF == ((const U8*)s)[2] ) ? \
+ ( ( 0x43 == ((const U8*)s)[3] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[4] ) && ( 0x67 == ((const U8*)s)[5] ) ) ? 0x1FC7 : 0x1FC6 )\
+ : 0 ) \
+ : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FC3 : 0 )\
+ : ( 0x67 == ((const U8*)s)[1] ) ? \
+ ( ( 0xAD == ((const U8*)s)[2] ) ? \
+ ( ( 0x49 == ((const U8*)s)[3] ) ? \
+ ( ( 0xAD == ((const U8*)s)[4] ) ? \
+ ( ( 0x41 == ((const U8*)s)[5] ) ? 0x1FD2 \
+ : ( 0x42 == ((const U8*)s)[5] ) ? 0x390 : 0 ) \
+ : ( ( 0xAF == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 0x1FD7 : 0 )\
+ : 0 ) \
+ : ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FD6 : 0 )\
+ : 0 ) \
+ : ( 0xB4 == ((const U8*)s)[0] ) ? \
+ ( ( 0x42 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xAD == ((const U8*)s)[2] ) && ( 0x5F == ((const U8*)s)[3] ) ) ? 0x1FE4 : 0 )\
+ : ( 0x46 == ((const U8*)s)[1] ) ? \
+ ( ( 0xAD == ((const U8*)s)[2] ) ? \
+ ( ( 0x49 == ((const U8*)s)[3] ) ? \
+ ( ( 0xAD == ((const U8*)s)[4] ) ? \
+ ( ( 0x41 == ((const U8*)s)[5] ) ? 0x1FE2 \
+ : ( 0x42 == ((const U8*)s)[5] ) ? 0x3B0 : 0 ) \
+ : ( ( 0xAF == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 0x1FE7 : 0 )\
+ : ( 0x5F == ((const U8*)s)[3] ) ? \
+ ( ( 0xAD == ((const U8*)s)[4] ) ? \
+ ( ( 0x41 == ((const U8*)s)[5] ) ? 0x1F52 \
+ : ( 0x42 == ((const U8*)s)[5] ) ? 0x1F54 : 0x1F50 ) \
+ : ( ( 0xAF == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 0x1F56 : 0x1F50 )\
+ : 0 ) \
+ : ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FE6 : 0 )\
+ : ( 0x4A == ((const U8*)s)[1] ) ? \
+ ( ( 0xAF == ((const U8*)s)[2] ) ? \
+ ( ( 0x43 == ((const U8*)s)[3] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[4] ) && ( 0x67 == ((const U8*)s)[5] ) ) ? 0x1FF7 : 0x1FF6 )\
+ : 0 ) \
+ : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FF3 : 0 )\
+ : ( ( ( 0x55 == ((const U8*)s)[1] ) && ( 0xB3 == ((const U8*)s)[2] ) ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FF4 : 0 )\
+ : ( 0xB7 == ((const U8*)s)[0] ) ? what_MULTI_CHAR_FOLD_utf8_safe_part0_(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part1_(s,e) )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part4_(s,e) \
+( ( 0x42 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xAD == ((const U8*)s)[2] ) && ( 0x5F == ((const U8*)s)[3] ) ) ? 0x1FE4 : 0 )\
+ : ( 0x46 == ((const U8*)s)[1] ) ? \
+ ( ( 0xAD == ((const U8*)s)[2] ) ? \
+ ( ( 0x5F == ((const U8*)s)[3] ) ? 0x1F50 : 0 ) \
+ : ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FE6 : 0 )\
+ : ( 0x4A == ((const U8*)s)[1] ) ? \
+ ( ( 0xAF == ((const U8*)s)[2] ) ? \
+ ( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FF6 : 0 ) \
+ : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FF3 : 0 )\
+ : ( ( ( 0x55 == ((const U8*)s)[1] ) && ( 0xB3 == ((const U8*)s)[2] ) ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FF4 : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part5_(s,e) \
+( ( 0xBF == ((const U8*)s)[0] ) ? \
+ ( ( 0x66 == ((const U8*)s)[1] ) ? \
+ ( ( 0x41 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F80 : 0 )\
+ : ( 0x42 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F81 : 0 )\
+ : ( 0x43 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F82 : 0 )\
+ : ( 0x44 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F83 : 0 )\
+ : ( 0x45 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F84 : 0 )\
+ : ( 0x46 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F85 : 0 )\
+ : ( 0x47 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F86 : 0 )\
+ : ( ( ( 0x48 == ((const U8*)s)[2] ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F87 : 0 )\
+ : ( 0x67 == ((const U8*)s)[1] ) ? \
+ ( ( 0x41 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F90 : 0 )\
+ : ( 0x42 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F91 : 0 )\
+ : ( 0x43 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F92 : 0 )\
+ : ( 0x44 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F93 : 0 )\
+ : ( 0x45 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F94 : 0 )\
+ : ( 0x46 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F95 : 0 )\
+ : ( 0x47 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F96 : 0 )\
+ : ( ( ( 0x48 == ((const U8*)s)[2] ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F97 : 0 )\
+ : ( 0x69 == ((const U8*)s)[1] ) ? \
+ ( ( 0x41 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA0 : 0 )\
+ : ( 0x42 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA1 : 0 )\
+ : ( 0x43 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA2 : 0 )\
+ : ( 0x44 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA3 : 0 )\
+ : ( 0x45 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA4 : 0 )\
+ : ( 0x46 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA5 : 0 )\
+ : ( 0x47 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA6 : 0 )\
+ : ( 0x48 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA7 : 0 )\
+ : ( 0x57 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FB2 : 0 )\
+ : ( 0x62 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FC2 : 0 )\
+ : ( ( ( 0x6A == ((const U8*)s)[2] ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FF2 : 0 )\
+ : 0 ) \
+ : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part6_(s,e) \
+( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ? \
+ ( ( ( 0xAA == ((const U8*)s)[1] ) && ( 0x71 == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03 \
+ : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 ) \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ? \
+ ( ( ( 0xAE == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ? \
+ ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+ : ( 0x8E == ((const U8*)s)[0] ) ? \
+ ( ( 0x72 == ((const U8*)s)[1] ) ? \
+ ( ( 0x8E == ((const U8*)s)[2] ) ? \
+ ( ( 0x72 == ((const U8*)s)[3] ) ? 0x59 : 0 ) \
+ : ( ( ((const U8*)s)[2] & 0xBF ) == 's' ) ? 0x59 \
+ : ( ( ((const U8*)s)[2] & 0xBF ) == 't' ) ? 0xFB05 : 0 ) \
+ : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ? \
+ ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ? \
+ ( ( 0x8E == ((const U8*)s)[1] ) ? \
+ ( ( 0x72 == ((const U8*)s)[2] ) ? 0x59 : 0 ) \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ? \
+ ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) ? \
+ ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ? \
+ ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+ : ( 0xAA == ((const U8*)s)[0] ) ? \
+ ( ( ( 0x6A == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 0x149 : 0 )\
+ : ( 0xB3 == ((const U8*)s)[0] ) ? \
+ ( ( 0x53 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FB4 : 0 )\
+ : ( 0x55 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FC4 : 0 )\
+ : ( 0x58 == ((const U8*)s)[1] ) ? \
+ ( ( 0xAF == ((const U8*)s)[2] ) ? \
+ ( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FB6 : 0 ) \
+ : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FB3 : 0 )\
+ : ( 0x65 == ((const U8*)s)[1] ) ? \
+ ( ( 0xAF == ((const U8*)s)[2] ) ? \
+ ( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FC6 : 0 ) \
+ : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FC3 : 0 )\
+ : ( ( ( 0x67 == ((const U8*)s)[1] ) && ( 0xAF == ((const U8*)s)[2] ) ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FD6 : 0 )\
+ : ( 0xB4 == ((const U8*)s)[0] ) ? \
+ ( ( 0x42 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xAD == ((const U8*)s)[2] ) && ( 0x5F == ((const U8*)s)[3] ) ) ? 0x1FE4 : 0 )\
+ : ( 0x46 == ((const U8*)s)[1] ) ? \
+ ( ( 0xAD == ((const U8*)s)[2] ) ? \
+ ( ( 0x5F == ((const U8*)s)[3] ) ? 0x1F50 : 0 ) \
+ : ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FE6 : 0 )\
+ : ( 0x4A == ((const U8*)s)[1] ) ? \
+ ( ( 0xAF == ((const U8*)s)[2] ) ? \
+ ( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FF6 : 0 ) \
+ : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FF3 : 0 )\
+ : ( ( ( 0x55 == ((const U8*)s)[1] ) && ( 0xB3 == ((const U8*)s)[2] ) ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FF4 : 0 )\
+ : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part7_(s,e) \
+( ((e)-(s) > 2) ? \
+ ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ? \
+ ( ( ( 0xAA == ((const U8*)s)[1] ) && ( 0x71 == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03 \
+ : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 ) \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ? \
+ ( ( ( 0xAE == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ? \
+ ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+ : ( 0x8E == ((const U8*)s)[0] ) ? \
+ ( ( 0x72 == ((const U8*)s)[1] ) ? \
+ ( ( ( ((const U8*)s)[2] & 0xBF ) == 's' ) ? 0x59 \
+ : ( ( ((const U8*)s)[2] & 0xBF ) == 't' ) ? 0xFB05 : 0 ) \
+ : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ? \
+ ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ? \
+ ( ( 0x8E == ((const U8*)s)[1] ) ? \
+ ( ( 0x72 == ((const U8*)s)[2] ) ? 0x59 : 0 ) \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ? \
+ ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) ? \
+ ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ? \
+ ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+ : ( ( ( 0xAA == ((const U8*)s)[0] ) && ( 0x6A == ((const U8*)s)[1] ) ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 0x149 : 0 )\
+: ((e)-(s) > 1) ? \
+ ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 0xFB00 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 ) \
+ : 0 ) \
+: 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe(s,e) \
+( ((e)-(s) > 5) ? \
+ ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ? \
+ ( ( ( 0xAA == ((const U8*)s)[1] ) && ( 0x71 == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? what_MULTI_CHAR_FOLD_utf8_safe_part2_(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part3_(s,e) )\
+: ((e)-(s) > 4) ? \
+ ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ? \
+ ( ( ( 0xAA == ((const U8*)s)[1] ) && ( 0x71 == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03 \
+ : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 ) \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ? \
+ ( ( ( 0xAE == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ? \
+ ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+ : ( 0x8E == ((const U8*)s)[0] ) ? \
+ ( ( 0x72 == ((const U8*)s)[1] ) ? \
+ ( ( 0x8E == ((const U8*)s)[2] ) ? \
+ ( ( 0x72 == ((const U8*)s)[3] ) ? 0x59 : 0 ) \
+ : ( ( ((const U8*)s)[2] & 0xBF ) == 's' ) ? 0x59 \
+ : ( ( ((const U8*)s)[2] & 0xBF ) == 't' ) ? 0xFB05 : 0 ) \
+ : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ? \
+ ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ? \
+ ( ( 0x8E == ((const U8*)s)[1] ) ? \
+ ( ( 0x72 == ((const U8*)s)[2] ) ? 0x59 : 0 ) \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ? \
+ ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) ? \
+ ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ? \
+ ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+ : ( 0xAA == ((const U8*)s)[0] ) ? \
+ ( ( ( 0x6A == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 0x149 : 0 )\
+ : ( 0xB3 == ((const U8*)s)[0] ) ? \
+ ( ( 0x53 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FB4 : 0 )\
+ : ( 0x55 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FC4 : 0 )\
+ : ( 0x58 == ((const U8*)s)[1] ) ? \
+ ( ( 0xAF == ((const U8*)s)[2] ) ? \
+ ( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FB6 : 0 ) \
+ : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FB3 : 0 )\
+ : ( 0x65 == ((const U8*)s)[1] ) ? \
+ ( ( 0xAF == ((const U8*)s)[2] ) ? \
+ ( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FC6 : 0 ) \
+ : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FC3 : 0 )\
+ : ( ( ( 0x67 == ((const U8*)s)[1] ) && ( 0xAF == ((const U8*)s)[2] ) ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FD6 : 0 )\
+ : ( 0xB4 == ((const U8*)s)[0] ) ? what_MULTI_CHAR_FOLD_utf8_safe_part4_(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part5_(s,e) )\
+: ((e)-(s) > 3) ? what_MULTI_CHAR_FOLD_utf8_safe_part6_(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part7_(s,e) )
/*
MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
- &regcharclass_multi_char_folds::multi_char_folds('l', 'a')
+ %regcharclass_multi_char_folds::multi_char_folds('l', 'a')
*/
/*** GENERATED CODE ***/
#define is_MULTI_CHAR_FOLD_latin1_safe(s,e) \
( ((e)-(s) > 2) ? \
- ( ( ( ((const U8*)s)[0] & 0xBF ) == 0x86 ) ? \
- ( ( ( ((const U8*)s)[1] & 0xBF ) == 0x86 ) ? \
- ( ( ( ( ((const U8*)s)[2] & 0xBF ) == 0x89 ) || ( ( ((const U8*)s)[2] & 0xBF ) == 0x93 ) ) ? 3 : 2 )\
- : ( ( ( ((const U8*)s)[1] & 0xBF ) == 0x89 ) || ( ( ((const U8*)s)[1] & 0xBF ) == 0x93 ) ) ? 2 : 0 )\
- : ( ( ( ((const U8*)s)[0] & 0xBF ) == 0xA2 ) && ( ( ((const U8*)s)[1] & 0xBE ) == 0xA2 ) ) ? 2 : 0 )\
+ ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? \
+ ( ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ? 3 : 2 )\
+ : ( ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+ : ( ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) && ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ) ? 2 : 0 )\
+: ((e)-(s) > 1) ? \
+ ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+ : ( ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) && ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ) ? 2 : 0 )\
+: 0 )
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_latin1_safe(s,e) \
+( ((e)-(s) > 2) ? \
+ ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03 \
+ : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 ) \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 ) \
+ : 0 ) \
: ((e)-(s) > 1) ? \
- ( ( ( ((const U8*)s)[0] & 0xBF ) == 0x86 ) ? \
- ( ( ( ( ((const U8*)s)[1] & 0xBF ) == 0x86 ) || ( ( ((const U8*)s)[1] & 0xBF ) == 0x89 ) || ( ( ((const U8*)s)[1] & 0xBF ) == 0x93 ) ) ? 2 : 0 )\
- : ( ( ( ((const U8*)s)[0] & 0xBF ) == 0xA2 ) && ( ( ((const U8*)s)[1] & 0xBE ) == 0xA2 ) ) ? 2 : 0 )\
+ ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 0xFB00 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 ) \
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59 \
+ : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 ) \
+ : 0 ) \
: 0 )
/*
THREE_CHAR_FOLD: A three-character multi-char fold
- &regcharclass_multi_char_folds::multi_char_folds('u', '3')
+ %regcharclass_multi_char_folds::multi_char_folds('u', '3')
*/
/*** GENERATED CODE ***/
#define is_THREE_CHAR_FOLD_utf8_safe(s,e) \
( ((e)-(s) > 5) ? \
- ( ( 0x86 == ((const U8*)s)[0] ) ? \
- ( ( ( 0x86 == ((const U8*)s)[1] ) && ( 0x89 == ((const U8*)s)[2] || 0x93 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) && ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ) ? 3 : 0 )\
: ( 0xB3 == ((const U8*)s)[0] ) ? \
( ( 0x58 == ((const U8*)s)[1] || 0x65 == ((const U8*)s)[1] ) ? \
( ( ( ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) && ( 0xB3 == ((const U8*)s)[4] ) ) && ( 0x67 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
: ( ( ( 0x67 == ((const U8*)s)[1] ) && ( 0xAD == ((const U8*)s)[2] ) ) && ( 0x49 == ((const U8*)s)[3] ) ) ? ( ( 0xAD == ((const U8*)s)[4] ) ?\
- ( ( inRANGE(((const U8*)s)[5], 0x41, 0x42 ) ) ? 6 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x41, 0x42) ) ? 6 : 0 )\
: ( ( 0xAF == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 6 : 0 ) : 0 )\
: ( 0xB4 == ((const U8*)s)[0] ) ? \
( ( 0x46 == ((const U8*)s)[1] ) ? \
( ( ( 0xAD == ((const U8*)s)[2] ) && ( 0x49 == ((const U8*)s)[3] || 0x5F == ((const U8*)s)[3] ) ) ? ( ( 0xAD == ((const U8*)s)[4] ) ?\
- ( ( inRANGE(((const U8*)s)[5], 0x41, 0x42 ) ) ? 6 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x41, 0x42) ) ? 6 : 0 )\
: ( ( 0xAF == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 6 : 0 ) : 0 )\
: ( ( ( ( ( 0x4A == ((const U8*)s)[1] ) && ( 0xAF == ((const U8*)s)[2] ) ) && ( 0x43 == ((const U8*)s)[3] ) ) && ( 0xB3 == ((const U8*)s)[4] ) ) && ( 0x67 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
: 0 ) \
-: ( ( ( ((e)-(s) > 2) && ( 0x86 == ((const U8*)s)[0] ) ) && ( 0x86 == ((const U8*)s)[1] ) ) && ( 0x89 == ((const U8*)s)[2] || 0x93 == ((const U8*)s)[2] ) ) ? 3 : 0 )
+: ( ( ( ((e)-(s) > 2) && ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ) && ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ) && ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ) ? 3 : 0 )
/*
THREE_CHAR_FOLD: A three-character multi-char fold
- &regcharclass_multi_char_folds::multi_char_folds('l', '3')
+ %regcharclass_multi_char_folds::multi_char_folds('l', '3')
*/
/*** GENERATED CODE ***/
#define is_THREE_CHAR_FOLD_latin1_safe(s,e) \
-( ( ( ( ( ((e) - (s)) >= 3 ) && ( ( ((const U8*)s)[0] & 0xBF ) == 0x86 ) ) && ( ( ((const U8*)s)[1] & 0xBF ) == 0x86 ) ) && ( ( ( ((const U8*)s)[2] & 0xBF ) == 0x89 ) || ( ( ((const U8*)s)[2] & 0xBF ) == 0x93 ) ) ) ? 3 : 0 )
+( ( ( ( ( ((e) - (s)) >= 3 ) && ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ) && ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ) && ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ) ? 3 : 0 )
/*
THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
- &regcharclass_multi_char_folds::multi_char_folds('u', 'h')
+ %regcharclass_multi_char_folds::multi_char_folds('u', 'h')
*/
/*** GENERATED CODE ***/
#define is_THREE_CHAR_FOLD_HEAD_utf8_safe(s,e) \
( ((e)-(s) > 3) ? \
- ( ( ( ( ((const U8*)s)[0] & 0xEF ) == 0x81 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0x88 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0xA2 ) || ((const U8*)s)[0] == 0xA6 || ((const U8*)s)[0] == 0xA8 ) ? 1\
- : ( 0x86 == ((const U8*)s)[0] ) ? \
- ( ( 0x86 == ((const U8*)s)[1] ) ? 2 : 1 ) \
+ ( ( ( ( ((const U8*)s)[0] & 0xAF ) == 'a' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 'h' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 's' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ? 1\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 2 : 1 ) \
+ : ( 0x8E == ((const U8*)s)[0] ) ? \
+ ( ( 0x72 == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xAA == ((const U8*)s)[0] ) ? \
( ( 0x6A == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xB3 == ((const U8*)s)[0] ) ? \
@@ -2002,14 +3380,16 @@
: ( 0xB7 == ((const U8*)s)[0] ) ? \
( ( ( 0x52 == ((const U8*)s)[1] ) && ( 0x46 == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || 0x71 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xBF == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0x66, 0x67 ) ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) ) ? 3 : 0 ) \
- : ( ( 0x69 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) || 0x57 == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || 0x6A == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x66, 0x67) ) ? \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) ) ? 3 : 0 )\
+ : ( ( 0x69 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) || 0x57 == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || 0x6A == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: 0 ) \
: ((e)-(s) > 2) ? \
- ( ( ( ( ((const U8*)s)[0] & 0xEF ) == 0x81 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0x88 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0xA2 ) || ((const U8*)s)[0] == 0xA6 || ((const U8*)s)[0] == 0xA8 ) ? 1\
- : ( 0x86 == ((const U8*)s)[0] ) ? \
- ( ( 0x86 == ((const U8*)s)[1] ) ? 2 : 1 ) \
+ ( ( ( ( ((const U8*)s)[0] & 0xAF ) == 'a' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 'h' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 's' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ? 1\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 2 : 1 ) \
+ : ( 0x8E == ((const U8*)s)[0] ) ? \
+ ( ( 0x72 == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xAA == ((const U8*)s)[0] ) ? \
( ( 0x6A == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xB3 == ((const U8*)s)[0] ) ? \
@@ -2019,37 +3399,39 @@
: ( 0xB7 == ((const U8*)s)[0] ) ? \
( ( ( 0x52 == ((const U8*)s)[1] ) && ( 0x46 == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || 0x71 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xBF == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0x66, 0x67 ) ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) ) ? 3 : 0 ) \
- : ( ( 0x69 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) || 0x57 == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || 0x6A == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x66, 0x67) ) ? \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) ) ? 3 : 0 )\
+ : ( ( 0x69 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) || 0x57 == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || 0x6A == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: 0 ) \
: ((e)-(s) > 1) ? \
- ( ( ( ( ((const U8*)s)[0] & 0xEF ) == 0x81 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0x88 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0xA2 ) || ((const U8*)s)[0] == 0xA6 || ((const U8*)s)[0] == 0xA8 ) ? 1\
- : ( 0x86 == ((const U8*)s)[0] ) ? \
- ( ( 0x86 == ((const U8*)s)[1] ) ? 2 : 1 ) \
+ ( ( ( ( ((const U8*)s)[0] & 0xAF ) == 'a' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 'h' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 's' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ? 1\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 2 : 1 ) \
+ : ( 0x8E == ((const U8*)s)[0] ) ? \
+ ( ( 0x72 == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xAA == ((const U8*)s)[0] ) ? \
( ( 0x6A == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xB3 == ((const U8*)s)[0] ) ? \
( ( ((const U8*)s)[1] == 0x53 || ((const U8*)s)[1] == 0x55 || ((const U8*)s)[1] == 0x58 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x65 ) ) ? 2 : 0 )\
: ( ( 0xB4 == ((const U8*)s)[0] ) && ( ( ( ((const U8*)s)[1] & 0xFB ) == 0x42 ) || ((const U8*)s)[1] == 0x4A || ((const U8*)s)[1] == 0x55 ) ) ? 2 : 0 )\
: ((e)-(s) > 0) ? \
- ( ( ( ((const U8*)s)[0] & 0xEF ) == 0x81 ) || ( ( ((const U8*)s)[0] & 0xDF ) == 0x86 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0x88 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0xA2 ) || ((const U8*)s)[0] == 0xA8 )\
+ ( ( ( ((const U8*)s)[0] & 0xAF ) == 'a' ) || ( ( ((const U8*)s)[0] & 0x9F ) == 'f' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 'h' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 's' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) )\
: 0 )
/*
THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
- &regcharclass_multi_char_folds::multi_char_folds('l', 'h')
+ %regcharclass_multi_char_folds::multi_char_folds('l', 'h')
*/
/*** GENERATED CODE ***/
#define is_THREE_CHAR_FOLD_HEAD_latin1_safe(s,e) \
( ((e)-(s) > 1) ? \
- ( ( ( ( ((const U8*)s)[0] & 0xAF ) == 0x81 ) || ( ( ((const U8*)s)[0] & 0xBE ) == 0x88 ) || ( ( ((const U8*)s)[0] & 0xBE ) == 0xA2 ) || ( ( ((const U8*)s)[0] & 0xBF ) == 0xA6 ) || ( ( ((const U8*)s)[0] & 0xBF ) == 0xA8 ) ) ? 1\
- : ( ( ((const U8*)s)[0] & 0xBF ) == 0x86 ) ? \
- ( ( ( ((const U8*)s)[1] & 0xBF ) == 0x86 ) ? 2 : 1 ) \
+ ( ( ( ( ((const U8*)s)[0] & 0xAF ) == 'a' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 'h' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 's' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ? 1\
+ : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 2 : 1 ) \
: 0 ) \
: ((e)-(s) > 0) ? \
- ( ( ( ((const U8*)s)[0] & 0xAF ) == 0x81 ) || ( ( ((const U8*)s)[0] & 0x9F ) == 0x86 ) || ( ( ((const U8*)s)[0] & 0xBE ) == 0x88 ) || ( ( ((const U8*)s)[0] & 0xBE ) == 0xA2 ) || ( ( ((const U8*)s)[0] & 0xBF ) == 0xA8 ) )\
+ ( ( ( ((const U8*)s)[0] & 0xAF ) == 'a' ) || ( ( ((const U8*)s)[0] & 0x9F ) == 'f' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 'h' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 's' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) )\
: 0 )
/*
@@ -2061,7 +3443,7 @@
#define is_FOLDS_TO_MULTI_utf8(s) \
( ( 0x80 == ((const U8*)s)[0] ) ? \
( ( 0x72 == ((const U8*)s)[1] ) ? 2 : 0 ) \
-: ( 0x8C == ((const U8*)s)[0] || 0x9B == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0xB2, 0xB3 ) ) ?\
+: ( 0x8C == ((const U8*)s)[0] || 0x9B == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], 0xB2, 0xB3) ) ?\
( ( 0x57 == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0x8D == ((const U8*)s)[0] ) ? \
( ( 0x4A == ((const U8*)s)[1] ) ? 2 : 0 ) \
@@ -2069,17 +3451,17 @@
( ( ( 0x53 == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xBF == ((const U8*)s)[0] ) ? \
( ( 0x62 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x64, 0x68 ) || 0x71 == ((const U8*)s)[2] ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x64, 0x68) || 0x71 == ((const U8*)s)[2] ) ? 3 : 0 )\
: ( 0x68 == ((const U8*)s)[1] ) ? \
( ( 0x57 == ((const U8*)s)[2] || 0x59 == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || 0x64 == ((const U8*)s)[2] ) ? 3 : 0 )\
: ( 0x6A == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x72 ) ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || 0x5F == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x72) ) ? 3 : 0 )\
: ( 0x70 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x56 ) || 0x59 == ((const U8*)s)[2] || 0x5F == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x64, 0x65 ) || 0x6A == ((const U8*)s)[2] ) ? 3 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x56) || 0x59 == ((const U8*)s)[2] || 0x5F == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x64, 0x65) || 0x6A == ((const U8*)s)[2] ) ? 3 : 0 )\
: ( 0x71 == ((const U8*)s)[1] ) ? \
- ( ( inRANGE(((const U8*)s)[2], 0x43, 0x45 ) || inRANGE(((const U8*)s)[2], 0x47, 0x48 ) || 0x53 == ((const U8*)s)[2] || 0x59 == ((const U8*)s)[2] || 0x5F == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x64, 0x65 ) ) ? 3 : 0 )\
- : ( ( 0x72 == ((const U8*)s)[1] ) && ( ( ( ((const U8*)s)[2] & 0xFB ) == 0x43 ) || ( ( ((const U8*)s)[2] & 0xDE ) == 0x44 ) || ((const U8*)s)[2] == 0x48 || ((const U8*)s)[2] == 0x59 || ((const U8*)s)[2] == 0x5F || ( ( ((const U8*)s)[2] & 0xF7 ) == 0x62 ) ) ) ? 3 : 0 )\
-: ( ( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x71 == ((const U8*)s)[1] ) ) && ( 0x66 == ((const U8*)s)[2] ) ) && ( inRANGE(((const U8*)s)[3], 0x41, 0x47 ) || 0x5F == ((const U8*)s)[3] || inRANGE(((const U8*)s)[3], 0x62, 0x65 ) ) ) ? 4 : 0 )
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x43, 0x45) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x47, 0x48) || 0x53 == ((const U8*)s)[2] || 0x59 == ((const U8*)s)[2] || 0x5F == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x64, 0x65) ) ? 3 : 0 )\
+ : ( ( 0x72 == ((const U8*)s)[1] ) && ( ( ( ((const U8*)s)[2] & 0xFB ) == 0x43 ) || ( ( ((const U8*)s)[2] & 0xDE ) == 0x44 ) || ((const U8*)s)[2] == 0x48 || ((const U8*)s)[2] == 0x59 || ((const U8*)s)[2] == 0x5F || ( ( ((const U8*)s)[2] & '7' ) == 0x62 ) ) ) ? 3 : 0 )\
+: ( ( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x71 == ((const U8*)s)[1] ) ) && ( 0x66 == ((const U8*)s)[2] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x47) || 0x5F == ((const U8*)s)[3] || inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x65) ) ) ? 4 : 0 )
/*
PROBLEMATIC_LOCALE_FOLD: characters whose fold is problematic under locale
@@ -2088,11 +3470,11 @@
*/
/*** GENERATED CODE ***/
#define is_PROBLEMATIC_LOCALE_FOLD_utf8(s) \
-( ( ( ((const U8*)s)[0] <= 0x40 ) || inRANGE(((const U8*)s)[0], 0x4B, 0x50 ) || inRANGE(((const U8*)s)[0], 0x5A, 0x5E ) || inRANGE(((const U8*)s)[0], 0x60, 0x61 ) || inRANGE(((const U8*)s)[0], 0x6B, 0x6F ) || inRANGE(((const U8*)s)[0], 0x79, 0x7F ) || inRANGE(((const U8*)s)[0], 0x81, 0x89 ) || inRANGE(((const U8*)s)[0], 0x91, 0x99 ) || inRANGE(((const U8*)s)[0], 0xA1, 0xA9 ) || 0xB0 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0xBA, 0xBB ) || inRANGE(((const U8*)s)[0], 0xC0, 0xC9 ) || inRANGE(((const U8*)s)[0], 0xD0, 0xD9 ) || 0xE0 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0xE2, 0xE9 ) || inRANGE(((const U8*)s)[0], 0xF0, 0xF9 ) || 0xFF == ((const U8*)s)[0] ) ? 1\
+( ( ( ((const U8*)s)[0] <= ' ' ) || inRANGE_helper_(U8, ((const U8*)s)[0], '.', '&') || inRANGE_helper_(U8, ((const U8*)s)[0], '!', ';') || inRANGE_helper_(U8, ((const U8*)s)[0], '-', '/') || inRANGE_helper_(U8, ((const U8*)s)[0], ',', '?') || inRANGE_helper_(U8, ((const U8*)s)[0], '`', '"') || inRANGE_helper_(U8, ((const U8*)s)[0], 'a', 'i') || inRANGE_helper_(U8, ((const U8*)s)[0], 'j', 'r') || inRANGE_helper_(U8, ((const U8*)s)[0], '~', 'z') || '^' == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], '[', ']') || inRANGE_helper_(U8, ((const U8*)s)[0], '{', 'I') || inRANGE_helper_(U8, ((const U8*)s)[0], '}', 'R') || '\\' == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], 'S', 'Z') || inRANGE_helper_(U8, ((const U8*)s)[0], '0', '9') || 0xFF == ((const U8*)s)[0] ) ? 1\
: ( 0x78 == ((const U8*)s)[0] || 0x80 == ((const U8*)s)[0] || 0x8A == ((const U8*)s)[0] ) ?\
- ( ( inRANGE(((const U8*)s)[1], 0x41, 0x4A ) || inRANGE(((const U8*)s)[1], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[1] || inRANGE(((const U8*)s)[1], 0x62, 0x6A ) || inRANGE(((const U8*)s)[1], 0x70, 0x72 ) ) ? 2 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x51, 0x59) || 0x5F == ((const U8*)s)[1] || inRANGE_helper_(U8, ((const U8*)s)[1], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x70, 0x72) ) ? 2 : 0 )\
: ( 0x8C == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0x57, 0x58 ) ) ? 2 : 0 ) \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x57, 0x58) ) ? 2 : 0 ) \
: ( 0x8D == ((const U8*)s)[0] ) ? \
( ( 0x4A == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0x8E == ((const U8*)s)[0] ) ? \
@@ -2101,19 +3483,18 @@
( ( 0x57 == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xAD == ((const U8*)s)[0] ) ? \
( ( 0x48 == ((const U8*)s)[1] ) ? 2 : 0 ) \
-: ( inRANGE(((const U8*)s)[0], 0xB2, 0xB3 ) ) ? \
+: ( inRANGE_helper_(U8, ((const U8*)s)[0], 0xB2, 0xB3) ) ? \
( ( 0x6A == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xBF == ((const U8*)s)[0] ) ? \
- ( ( ( 0x62 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x64, 0x68 ) || 0x71 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ ( ( ( 0x62 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x64, 0x68) || 0x71 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xCA == ((const U8*)s)[0] ) ? \
- ( ( ( 0x4A == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x51, 0x52 ) ) ) ? 3 : 0 )\
-: ( ( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x71 == ((const U8*)s)[1] ) ) && ( 0x66 == ((const U8*)s)[2] ) ) && ( inRANGE(((const U8*)s)[3], 0x41, 0x47 ) ) ) ? 4 : 0 )
+ ( ( ( 0x4A == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x52) ) ) ? 3 : 0 )\
+: ( ( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x71 == ((const U8*)s)[1] ) ) && ( 0x66 == ((const U8*)s)[2] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x47) ) ) ? 4 : 0 )
/*** GENERATED CODE ***/
#define is_PROBLEMATIC_LOCALE_FOLD_cp(cp) \
( cp <= 0xFF || ( 0xFF < cp && \
-( 0x130 == cp || ( 0x130 < cp && \
-( 0x131 == cp || ( 0x131 < cp && \
+( inRANGE_helper_(UV, cp, 0x130, 0x131) || ( 0x131 < cp && \
( 0x149 == cp || ( 0x149 < cp && \
( 0x178 == cp || ( 0x178 < cp && \
( 0x17F == cp || ( 0x17F < cp && \
@@ -2121,10 +3502,9 @@
( 0x307 == cp || ( 0x307 < cp && \
( 0x39C == cp || ( 0x39C < cp && \
( 0x3BC == cp || ( 0x3BC < cp && \
-( inRANGE(cp, 0x1E96, 0x1E9A) || ( 0x1E9A < cp && \
+( inRANGE_helper_(UV, cp, 0x1E96, 0x1E9A) || ( 0x1E9A < cp && \
( 0x1E9E == cp || ( 0x1E9E < cp && \
-( 0x212A == cp || ( 0x212A < cp && \
-( 0x212B == cp || inRANGE(cp, 0xFB00, 0xFB06) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
+( inRANGE_helper_(UV, cp, 0x212A, 0x212B) || inRANGE_helper_(UV, cp, 0xFB00, 0xFB06) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
/*
PROBLEMATIC_LOCALE_FOLDEDS_START: The first folded character of folds which are problematic under locale
@@ -2133,30 +3513,29 @@
*/
/*** GENERATED CODE ***/
#define is_PROBLEMATIC_LOCALE_FOLDEDS_START_utf8(s) \
-( ( ( ((const U8*)s)[0] <= 0x40 ) || inRANGE(((const U8*)s)[0], 0x4B, 0x50 ) || inRANGE(((const U8*)s)[0], 0x5A, 0x5E ) || inRANGE(((const U8*)s)[0], 0x60, 0x61 ) || inRANGE(((const U8*)s)[0], 0x6B, 0x6F ) || inRANGE(((const U8*)s)[0], 0x79, 0x7F ) || inRANGE(((const U8*)s)[0], 0x81, 0x89 ) || inRANGE(((const U8*)s)[0], 0x91, 0x99 ) || inRANGE(((const U8*)s)[0], 0xA1, 0xA9 ) || 0xB0 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0xBA, 0xBB ) || inRANGE(((const U8*)s)[0], 0xC0, 0xC9 ) || inRANGE(((const U8*)s)[0], 0xD0, 0xD9 ) || 0xE0 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0xE2, 0xE9 ) || inRANGE(((const U8*)s)[0], 0xF0, 0xF9 ) || 0xFF == ((const U8*)s)[0] ) ? 1\
+( ( ( ((const U8*)s)[0] <= ' ' ) || inRANGE_helper_(U8, ((const U8*)s)[0], '.', '&') || inRANGE_helper_(U8, ((const U8*)s)[0], '!', ';') || inRANGE_helper_(U8, ((const U8*)s)[0], '-', '/') || inRANGE_helper_(U8, ((const U8*)s)[0], ',', '?') || inRANGE_helper_(U8, ((const U8*)s)[0], '`', '"') || inRANGE_helper_(U8, ((const U8*)s)[0], 'a', 'i') || inRANGE_helper_(U8, ((const U8*)s)[0], 'j', 'r') || inRANGE_helper_(U8, ((const U8*)s)[0], '~', 'z') || '^' == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], '[', ']') || inRANGE_helper_(U8, ((const U8*)s)[0], '{', 'I') || inRANGE_helper_(U8, ((const U8*)s)[0], '}', 'R') || '\\' == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], 'S', 'Z') || inRANGE_helper_(U8, ((const U8*)s)[0], '0', '9') || 0xFF == ((const U8*)s)[0] ) ? 1\
: ( 0x78 == ((const U8*)s)[0] || 0x80 == ((const U8*)s)[0] || 0x8A == ((const U8*)s)[0] ) ?\
- ( ( inRANGE(((const U8*)s)[1], 0x41, 0x4A ) || inRANGE(((const U8*)s)[1], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[1] || inRANGE(((const U8*)s)[1], 0x62, 0x6A ) || inRANGE(((const U8*)s)[1], 0x70, 0x72 ) ) ? 2 : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x51, 0x59) || 0x5F == ((const U8*)s)[1] || inRANGE_helper_(U8, ((const U8*)s)[1], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x70, 0x72) ) ? 2 : 0 )\
: ( 0x8C == ((const U8*)s)[0] ) ? \
- ( ( inRANGE(((const U8*)s)[1], 0x57, 0x58 ) ) ? 2 : 0 ) \
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x57, 0x58) ) ? 2 : 0 ) \
: ( 0x8D == ((const U8*)s)[0] ) ? \
( ( 0x4A == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0x8E == ((const U8*)s)[0] ) ? \
( ( 0x66 == ((const U8*)s)[1] || 0x72 == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0x9B == ((const U8*)s)[0] ) ? \
( ( 0x57 == ((const U8*)s)[1] ) ? 2 : 0 ) \
-: ( 0xAA == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0xB2, 0xB3 ) ) ?\
+: ( 0xAA == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], 0xB2, 0xB3) ) ?\
( ( 0x6A == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xBF == ((const U8*)s)[0] ) ? \
- ( ( ( 0x62 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x64, 0x68 ) || 0x71 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+ ( ( ( 0x62 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x64, 0x68) || 0x71 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xCA == ((const U8*)s)[0] ) ? \
- ( ( ( 0x4A == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x51, 0x52 ) ) ) ? 3 : 0 )\
-: ( ( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x71 == ((const U8*)s)[1] ) ) && ( 0x66 == ((const U8*)s)[2] ) ) && ( inRANGE(((const U8*)s)[3], 0x41, 0x47 ) ) ) ? 4 : 0 )
+ ( ( ( 0x4A == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x52) ) ) ? 3 : 0 )\
+: ( ( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x71 == ((const U8*)s)[1] ) ) && ( 0x66 == ((const U8*)s)[2] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x47) ) ) ? 4 : 0 )
/*** GENERATED CODE ***/
#define is_PROBLEMATIC_LOCALE_FOLDEDS_START_cp(cp) \
( cp <= 0xFF || ( 0xFF < cp && \
-( 0x130 == cp || ( 0x130 < cp && \
-( 0x131 == cp || ( 0x131 < cp && \
+( inRANGE_helper_(UV, cp, 0x130, 0x131) || ( 0x131 < cp && \
( 0x149 == cp || ( 0x149 < cp && \
( 0x178 == cp || ( 0x178 < cp && \
( 0x17F == cp || ( 0x17F < cp && \
@@ -2164,10 +3543,9 @@
( 0x2BC == cp || ( 0x2BC < cp && \
( 0x39C == cp || ( 0x39C < cp && \
( 0x3BC == cp || ( 0x3BC < cp && \
-( inRANGE(cp, 0x1E96, 0x1E9A) || ( 0x1E9A < cp && \
+( inRANGE_helper_(UV, cp, 0x1E96, 0x1E9A) || ( 0x1E9A < cp && \
( 0x1E9E == cp || ( 0x1E9E < cp && \
-( 0x212A == cp || ( 0x212A < cp && \
-( 0x212B == cp || inRANGE(cp, 0xFB00, 0xFB06) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
+( inRANGE_helper_(UV, cp, 0x212A, 0x212B) || inRANGE_helper_(UV, cp, 0xFB00, 0xFB06) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
/*
PATWS: pattern white space
@@ -2177,23 +3555,12 @@
/*** GENERATED CODE ***/
#define is_PATWS_safe(s,e,is_utf8) \
( ( LIKELY((e) > (s)) ) ? \
- ( ( 0x05 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0x0B, 0x0D ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] || 0x40 == ((const U8*)s)[0] ) ? 1\
+ ( ( '\t' == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\r') || 0x15 == ((const U8*)s)[0] || '\n' == ((const U8*)s)[0] || ' ' == ((const U8*)s)[0] ) ? 1\
: ( ( is_utf8 && LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) && ( 0xCA == ((const U8*)s)[0] ) ) ? ( ( 0x41 == ((const U8*)s)[1] ) ?\
- ( ( inRANGE(((const U8*)s)[2], 0x55, 0x56 ) ) ? 3 : 0 ) \
- : ( ( 0x42 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x49, 0x4A ) ) ) ? 3 : 0 ) : 0 )\
+ ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x55, 0x56) ) ? 3 : 0 )\
+ : ( ( 0x42 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x49, 0x4A) ) ) ? 3 : 0 ) : 0 )\
: 0 )
-/*** GENERATED CODE ***/
-#define is_PATWS_cp(cp) \
-( 0x05 == cp || ( 0x05 < cp && \
-( inRANGE(cp, 0x0B, 0x0D) || ( 0x0D < cp && \
-( 0x15 == cp || ( 0x15 < cp && \
-( 0x25 == cp || ( 0x25 < cp && \
-( 0x40 == cp || ( 0x40 < cp && \
-( 0x200E == cp || ( 0x200E < cp && \
-( 0x200F == cp || ( 0x200F < cp && \
-( 0x2028 == cp || 0x2029 == cp ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
-
#endif /* EBCDIC 037 */
#endif /* PERL_REGCHARCLASS_H_ */
@@ -2247,9 +3614,9 @@
* baba9dfc133e3cb770a89aaf0973b1341fa61c2da6c176baf6428898b3b568d8 lib/unicore/extracted/DLineBreak.txt
* 6d4a8c945dd7db83ed617cbb7d937de7f4ecf016ff22970d846e996a7c9a2a5d lib/unicore/extracted/DNumType.txt
* 5b7c14380d5cceeaffcfbc18db1ed936391d2af2d51f5a41f1a17b692c77e59b lib/unicore/extracted/DNumValues.txt
- * ee0dd174fd5b158d82dfea95d7d822ca0bfcd490182669353dca3ab39a8ee807 lib/unicore/mktables
+ * 28076ceb3f4e2514ea9db243f4b918b9a7c2807b036237e2276b99b2659d9474 lib/unicore/mktables
* 50b85a67451145545a65cea370dab8d3444fbfe07e9c34cef560c5b7da9d3eef lib/unicore/version
- * 2680b9254eb236c5c090f11b149605043e8c8433661b96efc4a42fb4709342a5 regen/charset_translations.pl
- * f9a393e7add8c7c2728356473ce5b52246d51295b2da0c48fb6f0aa21799e2bb regen/regcharclass.pl
- * b549b9989c6987563dad8f8ad6b984c8026cdc283d60ea34457959c5d4b4ade0 regen/regcharclass_multi_char_folds.pl
+ * 24120d5e0c9685c442c93bc1dbea9b85ef973bf8e9474baf0e55b160c288226b regen/charset_translations.pl
+ * 3635c6e564558e965018947bdab45f37d9a4fa82eb05b2694eae1a04bf7e65a3 regen/regcharclass.pl
+ * b2f896452d2b30da3e04800f478c60c1fd0b03d6b668689b020f1e3cf1f1cdd9 regen/regcharclass_multi_char_folds.pl
* ex: set ro: */
diff --git a/Master/tlpkg/tlperl/lib/CORE/regcomp.h b/Master/tlpkg/tlperl/lib/CORE/regcomp.h
index 312c9055e75..c46451fceae 100644
--- a/Master/tlpkg/tlperl/lib/CORE/regcomp.h
+++ b/Master/tlpkg/tlperl/lib/CORE/regcomp.h
@@ -8,7 +8,8 @@
*
*/
-#ifndef PERL_REGCOMP_H_
+#if ! defined(PERL_REGCOMP_H_) && ( defined(PERL_CORE) \
+ || defined(PERL_EXT_RE_BUILD))
#define PERL_REGCOMP_H_
#include "regcharclass.h"
@@ -66,7 +67,7 @@
typedef struct regexp_internal {
union {
- U32 *offsets; /* offset annotations 20001228 MJD
+ U32 *offsets; /* offset annotations 20001228 MJD
data about mapping the program to the
string -
offsets[0] is proglen when this is used
@@ -80,9 +81,9 @@
Used to make it easier to clone and free arbitrary
data that the regops need. Often the ARG field of
a regop is an index into this structure */
- struct reg_code_blocks *code_blocks;/* positions of literal (?{}) */
+ struct reg_code_blocks *code_blocks;/* positions of literal (?{}) */
int name_list_idx; /* Optional data index of an array of paren names */
- regnode program[1]; /* Unwarranted chumminess with compiler. */
+ regnode program[1]; /* Unwarranted chumminess with compiler. */
} regexp_internal;
#define RXi_SET(x,y) (x)->pprivate = (void*)(y)
@@ -255,11 +256,11 @@ struct regnode_ssc {
((1<<32)-1), while on the Cray T90, sizeof(short)==8 and U16_MAX is
((1<<64)-1). To limit stack growth to reasonable sizes, supply a
smaller default.
- --Andy Dougherty 11 June 1998
+ --Andy Dougherty 11 June 1998
*/
#if SHORTSIZE > 2
# ifndef REG_INFTY
-# define REG_INFTY ((1<<16)-1)
+# define REG_INFTY nBIT_UMAX(16)
# endif
#endif
@@ -310,8 +311,8 @@ struct regnode_ssc {
#define OP(p) ((p)->type)
#define FLAGS(p) ((p)->flags) /* Caution: Doesn't apply to all \
- regnode types. For some, it's the \
- character set of the regnode */
+ regnode types. For some, it's the \
+ character set of the regnode */
#define STR_LENs(p) (__ASSERT_(OP(p) != LEXACT && OP(p) != LEXACT_REQ8) \
((struct regnode_string *)p)->str_len)
#define STRINGs(p) (__ASSERT_(OP(p) != LEXACT && OP(p) != LEXACT_REQ8) \
@@ -359,7 +360,7 @@ struct regnode_ssc {
} STMT_END
#define ANYOFR_BASE_BITS 20
-#define ANYOFRbase(p) (ARG(p) & ((1 << ANYOFR_BASE_BITS) - 1))
+#define ANYOFRbase(p) (ARG(p) & nBIT_MASK(ANYOFR_BASE_BITS))
#define ANYOFRdelta(p) (ARG(p) >> ANYOFR_BASE_BITS)
#undef NODE_ALIGN
@@ -697,12 +698,12 @@ struct regnode_ssc {
} STMT_END
/* Shifts a bit to get, eg. 0x4000_0000, then subtracts 1 to get 0x3FFF_FFFF */
-#define ANYOF_POSIXL_SETALL(ret) STMT_START { ((regnode_charclass_posixl*) (ret))->classflags = ((1U << ((ANYOF_POSIXL_MAX) - 1))) - 1; } STMT_END
+#define ANYOF_POSIXL_SETALL(ret) STMT_START { ((regnode_charclass_posixl*) (ret))->classflags = nBIT_MASK(ANYOF_POSIXL_MAX); } STMT_END
#define ANYOF_CLASS_SETALL(ret) ANYOF_POSIXL_SETALL(ret)
#define ANYOF_POSIXL_TEST_ANY_SET(p) \
((ANYOF_FLAGS(p) & ANYOF_MATCHES_POSIXL) \
- && (((regnode_charclass_posixl*)(p))->classflags))
+ && (((regnode_charclass_posixl*)(p))->classflags))
#define ANYOF_CLASS_TEST_ANY_SET(p) ANYOF_POSIXL_TEST_ANY_SET(p)
/* Since an SSC always has this field, we don't have to test for that; nor do
@@ -711,12 +712,12 @@ struct regnode_ssc {
cBOOL(((regnode_ssc*)(p))->classflags)
#define ANYOF_POSIXL_SSC_TEST_ALL_SET(p) /* Are all bits set? */ \
(((regnode_ssc*) (p))->classflags \
- == ((1U << ((ANYOF_POSIXL_MAX) - 1))) - 1)
+ == nBIT_MASK(ANYOF_POSIXL_MAX))
#define ANYOF_POSIXL_TEST_ALL_SET(p) \
- ((ANYOF_FLAGS(p) & ANYOF_MATCHES_POSIXL) \
+ ((ANYOF_FLAGS(p) & ANYOF_MATCHES_POSIXL) \
&& ((regnode_charclass_posixl*) (p))->classflags \
- == ((1U << ((ANYOF_POSIXL_MAX) - 1))) - 1)
+ == nBIT_MASK(ANYOF_POSIXL_MAX))
#define ANYOF_POSIXL_OR(source, dest) STMT_START { (dest)->classflags |= (source)->classflags ; } STMT_END
#define ANYOF_CLASS_OR(source, dest) ANYOF_POSIXL_OR((source), (dest))
@@ -731,9 +732,9 @@ struct regnode_ssc {
#define ANYOF_BITMAP_TEST(p, c) cBOOL(ANYOF_BITMAP_BYTE(p, c) & ANYOF_BIT(c))
#define ANYOF_BITMAP_SETALL(p) \
- memset (ANYOF_BITMAP(p), 255, ANYOF_BITMAP_SIZE)
+ memset (ANYOF_BITMAP(p), 255, ANYOF_BITMAP_SIZE)
#define ANYOF_BITMAP_CLEARALL(p) \
- Zero (ANYOF_BITMAP(p), ANYOF_BITMAP_SIZE)
+ Zero (ANYOF_BITMAP(p), ANYOF_BITMAP_SIZE)
/*
* Utility definitions.
@@ -883,9 +884,9 @@ struct _reg_trie_state {
/* info per word; indexed by wordnum */
typedef struct {
U16 prev; /* previous word in acceptance chain; eg in
- * zzz|abc|ab/ after matching the chars abc, the
- * accepted word is #2, and the previous accepted
- * word is #3 */
+ * zzz|abc|ab/ after matching the chars abc, the
+ * accepted word is #2, and the previous accepted
+ * word is #3 */
U32 len; /* how many chars long is this word? */
U32 accept; /* accept state for this word */
} reg_trie_wordinfo;
@@ -1120,7 +1121,7 @@ re.pm, especially to the documentation.
* the defaults if not done already */
#define DECLARE_AND_GET_RE_DEBUG_FLAGS \
volatile IV re_debug_flags = 0; PERL_UNUSED_VAR(re_debug_flags); \
- STMT_START { \
+ DEBUG_r({ \
SV * re_debug_flags_sv = NULL; \
/* get_sv() can return NULL during global destruction. */ \
re_debug_flags_sv = PL_curcop ? get_sv(RE_DEBUG_FLAGS, GV_ADD) : NULL; \
@@ -1131,7 +1132,7 @@ re.pm, especially to the documentation.
RE_DEBUG_COMPILE_DUMP | RE_DEBUG_EXECUTE_MASK ); \
re_debug_flags=SvIV(re_debug_flags_sv); \
} \
- } STMT_END
+ })
#define isDEBUG_WILDCARD (DEBUG_v_TEST || RE_DEBUG_FLAG(RE_DEBUG_EXTRA_WILDCARD))
@@ -1175,11 +1176,11 @@ re.pm, especially to the documentation.
#define FIRST_NON_ASCII_DECIMAL_DIGIT 0x660 /* ARABIC_INDIC_DIGIT_ZERO */
typedef enum {
- TRADITIONAL_BOUND = _CC_WORDCHAR,
- GCB_BOUND,
- LB_BOUND,
- SB_BOUND,
- WB_BOUND
+ TRADITIONAL_BOUND = _CC_WORDCHAR,
+ GCB_BOUND,
+ LB_BOUND,
+ SB_BOUND,
+ WB_BOUND
} bound_type;
/* This unpacks the FLAGS field of ANYOF[HR]x nodes. The value it contains
diff --git a/Master/tlpkg/tlperl/lib/CORE/regexp.h b/Master/tlpkg/tlperl/lib/CORE/regexp.h
index e12c6a9ffa6..c4210edf843 100644
--- a/Master/tlpkg/tlperl/lib/CORE/regexp.h
+++ b/Master/tlpkg/tlperl/lib/CORE/regexp.h
@@ -18,7 +18,7 @@
/* we don't want to include this stuff if we are inside of
an external regex engine based on the core one - like re 'debug'*/
-#include "utf8.h"
+# include "utf8.h"
typedef SSize_t regnode_offset;
@@ -49,11 +49,11 @@ struct reg_substr_data {
struct reg_substr_datum data[3]; /* Actual array */
};
-#ifdef PERL_ANY_COW
-#define SV_SAVED_COPY SV *saved_copy; /* If non-NULL, SV which is COW from original */
-#else
-#define SV_SAVED_COPY
-#endif
+# ifdef PERL_ANY_COW
+# define SV_SAVED_COPY SV *saved_copy; /* If non-NULL, SV which is COW from original */
+# else
+# define SV_SAVED_COPY
+# endif
/* offsets within a string of a particular /(.)/ capture */
@@ -69,14 +69,14 @@ typedef struct regexp_paren_pair {
SSize_t start_tmp;
} regexp_paren_pair;
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_UTF8_C)
-#define _invlist_union(a, b, output) _invlist_union_maybe_complement_2nd(a, b, FALSE, output)
-#define _invlist_intersection(a, b, output) _invlist_intersection_maybe_complement_2nd(a, b, FALSE, output)
+# if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_UTF8_C)
+# define _invlist_union(a, b, output) _invlist_union_maybe_complement_2nd(a, b, FALSE, output)
+# define _invlist_intersection(a, b, output) _invlist_intersection_maybe_complement_2nd(a, b, FALSE, output)
/* Subtracting b from a leaves in a everything that was there that isn't in b,
* that is the intersection of a with b's complement */
-#define _invlist_subtract(a, b, output) _invlist_intersection_maybe_complement_2nd(a, b, TRUE, output)
-#endif
+# define _invlist_subtract(a, b, output) _invlist_intersection_maybe_complement_2nd(a, b, TRUE, output)
+# endif
/* record the position of a (?{...}) within a pattern */
@@ -97,6 +97,7 @@ struct reg_code_blocks {
/*
+= for apidoc AyT||regexp
The regexp/REGEXP struct, see L<perlreapi> for further documentation
on the individual fields. The struct is ordered so that the most
commonly used fields are placed at the start.
@@ -166,7 +167,7 @@ typedef struct regexp {
} regexp;
-#define RXp_PAREN_NAMES(rx) ((rx)->paren_names)
+# define RXp_PAREN_NAMES(rx) ((rx)->paren_names)
/* used for high speed searches */
typedef struct re_scream_pos_data_s
@@ -204,9 +205,9 @@ typedef struct regexp_engine {
SV* (*named_buff_iter) (pTHX_ REGEXP * const rx, const SV * const lastkey,
const U32 flags);
SV* (*qr_package)(pTHX_ REGEXP * const rx);
-#ifdef USE_ITHREADS
+# ifdef USE_ITHREADS
void* (*dupe) (pTHX_ REGEXP * const rx, CLONE_PARAMS *param);
-#endif
+# endif
REGEXP* (*op_comp) (pTHX_ SV ** const patternp, int pat_count,
OP *expr, const struct regexp_engine* eng,
REGEXP *old_re,
@@ -218,12 +219,12 @@ typedef struct regexp_engine {
paren name. >= 1 is reserved for actual numbered captures, i.e. $1,
$2 etc.
*/
-#define RX_BUFF_IDX_CARET_PREMATCH -5 /* ${^PREMATCH} */
-#define RX_BUFF_IDX_CARET_POSTMATCH -4 /* ${^POSTMATCH} */
-#define RX_BUFF_IDX_CARET_FULLMATCH -3 /* ${^MATCH} */
-#define RX_BUFF_IDX_PREMATCH -2 /* $` */
-#define RX_BUFF_IDX_POSTMATCH -1 /* $' */
-#define RX_BUFF_IDX_FULLMATCH 0 /* $& */
+# define RX_BUFF_IDX_CARET_PREMATCH -5 /* ${^PREMATCH} */
+# define RX_BUFF_IDX_CARET_POSTMATCH -4 /* ${^POSTMATCH} */
+# define RX_BUFF_IDX_CARET_FULLMATCH -3 /* ${^MATCH} */
+# define RX_BUFF_IDX_PREMATCH -2 /* $` */
+# define RX_BUFF_IDX_POSTMATCH -1 /* $' */
+# define RX_BUFF_IDX_FULLMATCH 0 /* $& */
/*
Flags that are passed to the named_buff and named_buff_iter
@@ -233,27 +234,25 @@ typedef struct regexp_engine {
*/
/* The Tie::Hash::NamedCapture operation this is part of, if any */
-#define RXapif_FETCH 0x0001
-#define RXapif_STORE 0x0002
-#define RXapif_DELETE 0x0004
-#define RXapif_CLEAR 0x0008
-#define RXapif_EXISTS 0x0010
-#define RXapif_SCALAR 0x0020
-#define RXapif_FIRSTKEY 0x0040
-#define RXapif_NEXTKEY 0x0080
+# define RXapif_FETCH 0x0001
+# define RXapif_STORE 0x0002
+# define RXapif_DELETE 0x0004
+# define RXapif_CLEAR 0x0008
+# define RXapif_EXISTS 0x0010
+# define RXapif_SCALAR 0x0020
+# define RXapif_FIRSTKEY 0x0040
+# define RXapif_NEXTKEY 0x0080
/* Whether %+ or %- is being operated on */
-#define RXapif_ONE 0x0100 /* %+ */
-#define RXapif_ALL 0x0200 /* %- */
+# define RXapif_ONE 0x0100 /* %+ */
+# define RXapif_ALL 0x0200 /* %- */
/* Whether this is being called from a re:: function */
-#define RXapif_REGNAME 0x0400
-#define RXapif_REGNAMES 0x0800
-#define RXapif_REGNAMES_COUNT 0x1000
+# define RXapif_REGNAME 0x0400
+# define RXapif_REGNAMES 0x0800
+# define RXapif_REGNAMES_COUNT 0x1000
/*
-=head1 REGEXP Functions
-
=for apidoc Am|REGEXP *|SvRX|SV *sv
Convenience macro to get the REGEXP from a SV. This is approximately
@@ -279,8 +278,8 @@ and check for NULL.
=cut
*/
-#define SvRX(sv) (Perl_get_re_arg(aTHX_ sv))
-#define SvRXOK(sv) cBOOL(Perl_get_re_arg(aTHX_ sv))
+# define SvRX(sv) (Perl_get_re_arg(aTHX_ sv))
+# define SvRXOK(sv) cBOOL(Perl_get_re_arg(aTHX_ sv))
/* Flags stored in regexp->extflags
@@ -294,11 +293,11 @@ and check for NULL.
*
*/
-#include "op_reg_common.h"
+# include "op_reg_common.h"
-#define RXf_PMf_STD_PMMOD (RXf_PMf_MULTILINE|RXf_PMf_SINGLELINE|RXf_PMf_FOLD|RXf_PMf_EXTENDED|RXf_PMf_EXTENDED_MORE|RXf_PMf_NOCAPTURE)
+# define RXf_PMf_STD_PMMOD (RXf_PMf_MULTILINE|RXf_PMf_SINGLELINE|RXf_PMf_FOLD|RXf_PMf_EXTENDED|RXf_PMf_EXTENDED_MORE|RXf_PMf_NOCAPTURE)
-#define CASE_STD_PMMOD_FLAGS_PARSE_SET(pmfl, x_count) \
+# define CASE_STD_PMMOD_FLAGS_PARSE_SET(pmfl, x_count) \
case IGNORE_PAT_MOD: *(pmfl) |= RXf_PMf_FOLD; break; \
case MULTILINE_PAT_MOD: *(pmfl) |= RXf_PMf_MULTILINE; break; \
case SINGLE_PAT_MOD: *(pmfl) |= RXf_PMf_SINGLELINE; break; \
@@ -314,7 +313,7 @@ and check for NULL.
case NOCAPTURE_PAT_MOD: *(pmfl) |= RXf_PMf_NOCAPTURE; break;
/* Note, includes charset ones, assumes 0 is the default for them */
-#define STD_PMMOD_FLAGS_CLEAR(pmfl) \
+# define STD_PMMOD_FLAGS_CLEAR(pmfl) \
*(pmfl) &= ~(RXf_PMf_FOLD|RXf_PMf_MULTILINE|RXf_PMf_SINGLELINE|RXf_PMf_EXTENDED|RXf_PMf_EXTENDED_MORE|RXf_PMf_CHARSET|RXf_PMf_NOCAPTURE)
/* chars and strings used as regex pattern modifiers
@@ -324,51 +323,51 @@ and check for NULL.
* for compatibility reasons with Regexp::Common which highjacked (?k:...)
* for its own uses. So 'k' is out as well.
*/
-#define DEFAULT_PAT_MOD '^' /* Short for all the default modifiers */
-#define EXEC_PAT_MOD 'e'
-#define KEEPCOPY_PAT_MOD 'p'
-#define NOCAPTURE_PAT_MOD 'n'
-#define ONCE_PAT_MOD 'o'
-#define GLOBAL_PAT_MOD 'g'
-#define CONTINUE_PAT_MOD 'c'
-#define MULTILINE_PAT_MOD 'm'
-#define SINGLE_PAT_MOD 's'
-#define IGNORE_PAT_MOD 'i'
-#define XTENDED_PAT_MOD 'x'
-#define NONDESTRUCT_PAT_MOD 'r'
-#define LOCALE_PAT_MOD 'l'
-#define UNICODE_PAT_MOD 'u'
-#define DEPENDS_PAT_MOD 'd'
-#define ASCII_RESTRICT_PAT_MOD 'a'
-
-#define ONCE_PAT_MODS "o"
-#define KEEPCOPY_PAT_MODS "p"
-#define NOCAPTURE_PAT_MODS "n"
-#define EXEC_PAT_MODS "e"
-#define LOOP_PAT_MODS "gc"
-#define NONDESTRUCT_PAT_MODS "r"
-#define LOCALE_PAT_MODS "l"
-#define UNICODE_PAT_MODS "u"
-#define DEPENDS_PAT_MODS "d"
-#define ASCII_RESTRICT_PAT_MODS "a"
-#define ASCII_MORE_RESTRICT_PAT_MODS "aa"
+# define DEFAULT_PAT_MOD '^' /* Short for all the default modifiers */
+# define EXEC_PAT_MOD 'e'
+# define KEEPCOPY_PAT_MOD 'p'
+# define NOCAPTURE_PAT_MOD 'n'
+# define ONCE_PAT_MOD 'o'
+# define GLOBAL_PAT_MOD 'g'
+# define CONTINUE_PAT_MOD 'c'
+# define MULTILINE_PAT_MOD 'm'
+# define SINGLE_PAT_MOD 's'
+# define IGNORE_PAT_MOD 'i'
+# define XTENDED_PAT_MOD 'x'
+# define NONDESTRUCT_PAT_MOD 'r'
+# define LOCALE_PAT_MOD 'l'
+# define UNICODE_PAT_MOD 'u'
+# define DEPENDS_PAT_MOD 'd'
+# define ASCII_RESTRICT_PAT_MOD 'a'
+
+# define ONCE_PAT_MODS "o"
+# define KEEPCOPY_PAT_MODS "p"
+# define NOCAPTURE_PAT_MODS "n"
+# define EXEC_PAT_MODS "e"
+# define LOOP_PAT_MODS "gc"
+# define NONDESTRUCT_PAT_MODS "r"
+# define LOCALE_PAT_MODS "l"
+# define UNICODE_PAT_MODS "u"
+# define DEPENDS_PAT_MODS "d"
+# define ASCII_RESTRICT_PAT_MODS "a"
+# define ASCII_MORE_RESTRICT_PAT_MODS "aa"
/* This string is expected by regcomp.c to be ordered so that the first
* character is the flag in bit RXf_PMf_STD_PMMOD_SHIFT of extflags; the next
* character is bit +1, etc. */
-#define STD_PAT_MODS "msixxn"
+# define STD_PAT_MODS "msixxn"
-#define CHARSET_PAT_MODS ASCII_RESTRICT_PAT_MODS DEPENDS_PAT_MODS LOCALE_PAT_MODS UNICODE_PAT_MODS
+# define CHARSET_PAT_MODS ASCII_RESTRICT_PAT_MODS DEPENDS_PAT_MODS LOCALE_PAT_MODS UNICODE_PAT_MODS
/* This string is expected by XS_re_regexp_pattern() in universal.c to be ordered
* so that the first character is the flag in bit RXf_PMf_STD_PMMOD_SHIFT of
* extflags; the next character is in bit +1, etc. */
-#define INT_PAT_MODS STD_PAT_MODS KEEPCOPY_PAT_MODS
+# define INT_PAT_MODS STD_PAT_MODS KEEPCOPY_PAT_MODS
-#define EXT_PAT_MODS ONCE_PAT_MODS KEEPCOPY_PAT_MODS NOCAPTURE_PAT_MODS
-#define QR_PAT_MODS STD_PAT_MODS EXT_PAT_MODS CHARSET_PAT_MODS
-#define M_PAT_MODS QR_PAT_MODS LOOP_PAT_MODS
-#define S_PAT_MODS M_PAT_MODS EXEC_PAT_MODS NONDESTRUCT_PAT_MODS
+# define EXT_PAT_MODS ONCE_PAT_MODS KEEPCOPY_PAT_MODS NOCAPTURE_PAT_MODS
+# define QR_PAT_MODS STD_PAT_MODS EXT_PAT_MODS CHARSET_PAT_MODS
+# define M_PAT_MODS QR_PAT_MODS LOOP_PAT_MODS
+# define S_PAT_MODS M_PAT_MODS EXEC_PAT_MODS NONDESTRUCT_PAT_MODS
/*
* NOTE: if you modify any RXf flags you should run regen.pl or
@@ -380,7 +379,7 @@ and check for NULL.
Set in Perl_pmruntime for a split. Will be used by regex engines to
check whether they should set RXf_SKIPWHITE
*/
-#define RXf_SPLIT RXf_PMf_SPLIT
+# define RXf_SPLIT RXf_PMf_SPLIT
/* Currently the regex flags occupy a single 32-bit word. Not all bits are
* currently used. The lower bits are shared with their corresponding PMf flag
@@ -415,50 +414,50 @@ and check for NULL.
* For the regexp bits, PL_reg_extflags_name[] in regnodes.h has a comment
* giving which bits are used/unused */
-#define RXf_BASE_SHIFT (_RXf_PMf_SHIFT_NEXT + 2)
+# define RXf_BASE_SHIFT (_RXf_PMf_SHIFT_NEXT + 2)
/* What we have seen */
-#define RXf_NO_INPLACE_SUBST (1U<<(RXf_BASE_SHIFT+2))
-#define RXf_EVAL_SEEN (1U<<(RXf_BASE_SHIFT+3))
+# define RXf_NO_INPLACE_SUBST (1U<<(RXf_BASE_SHIFT+2))
+# define RXf_EVAL_SEEN (1U<<(RXf_BASE_SHIFT+3))
/* Special */
-#define RXf_UNBOUNDED_QUANTIFIER_SEEN (1U<<(RXf_BASE_SHIFT+4))
-#define RXf_CHECK_ALL (1U<<(RXf_BASE_SHIFT+5))
+# define RXf_UNBOUNDED_QUANTIFIER_SEEN (1U<<(RXf_BASE_SHIFT+4))
+# define RXf_CHECK_ALL (1U<<(RXf_BASE_SHIFT+5))
/* UTF8 related */
-#define RXf_MATCH_UTF8 (1U<<(RXf_BASE_SHIFT+6)) /* $1 etc are utf8 */
+# define RXf_MATCH_UTF8 (1U<<(RXf_BASE_SHIFT+6)) /* $1 etc are utf8 */
/* Intuit related */
-#define RXf_USE_INTUIT_NOML (1U<<(RXf_BASE_SHIFT+7))
-#define RXf_USE_INTUIT_ML (1U<<(RXf_BASE_SHIFT+8))
-#define RXf_INTUIT_TAIL (1U<<(RXf_BASE_SHIFT+9))
-#define RXf_USE_INTUIT (RXf_USE_INTUIT_NOML|RXf_USE_INTUIT_ML)
+# define RXf_USE_INTUIT_NOML (1U<<(RXf_BASE_SHIFT+7))
+# define RXf_USE_INTUIT_ML (1U<<(RXf_BASE_SHIFT+8))
+# define RXf_INTUIT_TAIL (1U<<(RXf_BASE_SHIFT+9))
+# define RXf_USE_INTUIT (RXf_USE_INTUIT_NOML|RXf_USE_INTUIT_ML)
/* Do we have some sort of anchor? */
-#define RXf_IS_ANCHORED (1U<<(RXf_BASE_SHIFT+10))
+# define RXf_IS_ANCHORED (1U<<(RXf_BASE_SHIFT+10))
/* Copy and tainted info */
-#define RXf_COPY_DONE (1U<<(RXf_BASE_SHIFT+11))
+# define RXf_COPY_DONE (1U<<(RXf_BASE_SHIFT+11))
/* post-execution: $1 et al are tainted */
-#define RXf_TAINTED_SEEN (1U<<(RXf_BASE_SHIFT+12))
+# define RXf_TAINTED_SEEN (1U<<(RXf_BASE_SHIFT+12))
/* this pattern was tainted during compilation */
-#define RXf_TAINTED (1U<<(RXf_BASE_SHIFT+13))
+# define RXf_TAINTED (1U<<(RXf_BASE_SHIFT+13))
/* Flags indicating special patterns */
-#define RXf_START_ONLY (1U<<(RXf_BASE_SHIFT+14)) /* Pattern is /^/ */
-#define RXf_SKIPWHITE (1U<<(RXf_BASE_SHIFT+15)) /* Pattern is for a */
+# define RXf_START_ONLY (1U<<(RXf_BASE_SHIFT+14)) /* Pattern is /^/ */
+# define RXf_SKIPWHITE (1U<<(RXf_BASE_SHIFT+15)) /* Pattern is for a */
/* split " " */
-#define RXf_WHITE (1U<<(RXf_BASE_SHIFT+16)) /* Pattern is /\s+/ */
-#define RXf_NULL (1U<<(RXf_BASE_SHIFT+17)) /* Pattern is // */
+# define RXf_WHITE (1U<<(RXf_BASE_SHIFT+16)) /* Pattern is /\s+/ */
+# define RXf_NULL (1U<<(RXf_BASE_SHIFT+17)) /* Pattern is // */
/* See comments at the beginning of these defines about adding bits. The
* highest bit position should be used, so that if RXf_BASE_SHIFT gets
* increased, the #error below will be triggered so that you will be reminded
* to adjust things at the other end to keep the bit positions unchanged */
-#if RXf_BASE_SHIFT+17 > 31
-# error Too many RXf_PMf bits used. See comments at beginning of these for what to do
-#endif
+# if RXf_BASE_SHIFT+17 > 31
+# error Too many RXf_PMf bits used. See comments at beginning of these for what to do
+# endif
/*
* NOTE: if you modify any RXf flags you should run regen.pl or
@@ -466,99 +465,99 @@ and check for NULL.
*
*/
-#ifdef NO_TAINT_SUPPORT
-# define RX_ISTAINTED(rx_sv) 0
-# define RXp_ISTAINTED(prog) 0
-# define RX_TAINT_on(rx_sv) NOOP
-# define RXp_MATCH_TAINTED(prog) 0
-# define RX_MATCH_TAINTED(rx_sv) 0
-# define RXp_MATCH_TAINTED_on(prog) NOOP
-# define RX_MATCH_TAINTED_on(rx_sv) NOOP
-# define RXp_MATCH_TAINTED_off(prog) NOOP
-# define RX_MATCH_TAINTED_off(rx_sv) NOOP
-#else
-# define RX_ISTAINTED(rx_sv) (RX_EXTFLAGS(rx_sv) & RXf_TAINTED)
-# define RXp_ISTAINTED(prog) (RXp_EXTFLAGS(prog) & RXf_TAINTED)
-# define RX_TAINT_on(rx_sv) (RX_EXTFLAGS(rx_sv) |= RXf_TAINTED)
-# define RXp_MATCH_TAINTED(prog) (RXp_EXTFLAGS(prog) & RXf_TAINTED_SEEN)
-# define RX_MATCH_TAINTED(rx_sv) (RX_EXTFLAGS(rx_sv) & RXf_TAINTED_SEEN)
-# define RXp_MATCH_TAINTED_on(prog) (RXp_EXTFLAGS(prog) |= RXf_TAINTED_SEEN)
-# define RX_MATCH_TAINTED_on(rx_sv) (RX_EXTFLAGS(rx_sv) |= RXf_TAINTED_SEEN)
-# define RXp_MATCH_TAINTED_off(prog) (RXp_EXTFLAGS(prog) &= ~RXf_TAINTED_SEEN)
-# define RX_MATCH_TAINTED_off(rx_sv) (RX_EXTFLAGS(rx_sv) &= ~RXf_TAINTED_SEEN)
-#endif
-
-#define RXp_HAS_CUTGROUP(prog) ((prog)->intflags & PREGf_CUTGROUP_SEEN)
-
-#define RX_MATCH_TAINTED_set(rx_sv, t) ((t) \
+# ifdef NO_TAINT_SUPPORT
+# define RX_ISTAINTED(rx_sv) 0
+# define RXp_ISTAINTED(prog) 0
+# define RX_TAINT_on(rx_sv) NOOP
+# define RXp_MATCH_TAINTED(prog) 0
+# define RX_MATCH_TAINTED(rx_sv) 0
+# define RXp_MATCH_TAINTED_on(prog) NOOP
+# define RX_MATCH_TAINTED_on(rx_sv) NOOP
+# define RXp_MATCH_TAINTED_off(prog) NOOP
+# define RX_MATCH_TAINTED_off(rx_sv) NOOP
+# else
+# define RX_ISTAINTED(rx_sv) (RX_EXTFLAGS(rx_sv) & RXf_TAINTED)
+# define RXp_ISTAINTED(prog) (RXp_EXTFLAGS(prog) & RXf_TAINTED)
+# define RX_TAINT_on(rx_sv) (RX_EXTFLAGS(rx_sv) |= RXf_TAINTED)
+# define RXp_MATCH_TAINTED(prog) (RXp_EXTFLAGS(prog) & RXf_TAINTED_SEEN)
+# define RX_MATCH_TAINTED(rx_sv) (RX_EXTFLAGS(rx_sv) & RXf_TAINTED_SEEN)
+# define RXp_MATCH_TAINTED_on(prog) (RXp_EXTFLAGS(prog) |= RXf_TAINTED_SEEN)
+# define RX_MATCH_TAINTED_on(rx_sv) (RX_EXTFLAGS(rx_sv) |= RXf_TAINTED_SEEN)
+# define RXp_MATCH_TAINTED_off(prog) (RXp_EXTFLAGS(prog) &= ~RXf_TAINTED_SEEN)
+# define RX_MATCH_TAINTED_off(rx_sv) (RX_EXTFLAGS(rx_sv) &= ~RXf_TAINTED_SEEN)
+# endif
+
+# define RXp_HAS_CUTGROUP(prog) ((prog)->intflags & PREGf_CUTGROUP_SEEN)
+
+# define RX_MATCH_TAINTED_set(rx_sv, t) ((t) \
? RX_MATCH_TAINTED_on(rx_sv) \
: RX_MATCH_TAINTED_off(rx_sv))
-#define RXp_MATCH_COPIED(prog) (RXp_EXTFLAGS(prog) & RXf_COPY_DONE)
-#define RX_MATCH_COPIED(rx_sv) (RX_EXTFLAGS(rx_sv) & RXf_COPY_DONE)
-#define RXp_MATCH_COPIED_on(prog) (RXp_EXTFLAGS(prog) |= RXf_COPY_DONE)
-#define RX_MATCH_COPIED_on(rx_sv) (RX_EXTFLAGS(rx_sv) |= RXf_COPY_DONE)
-#define RXp_MATCH_COPIED_off(prog) (RXp_EXTFLAGS(prog) &= ~RXf_COPY_DONE)
-#define RX_MATCH_COPIED_off(rx_sv) (RX_EXTFLAGS(rx_sv) &= ~RXf_COPY_DONE)
-#define RX_MATCH_COPIED_set(rx_sv,t) ((t) \
+# define RXp_MATCH_COPIED(prog) (RXp_EXTFLAGS(prog) & RXf_COPY_DONE)
+# define RX_MATCH_COPIED(rx_sv) (RX_EXTFLAGS(rx_sv) & RXf_COPY_DONE)
+# define RXp_MATCH_COPIED_on(prog) (RXp_EXTFLAGS(prog) |= RXf_COPY_DONE)
+# define RX_MATCH_COPIED_on(rx_sv) (RX_EXTFLAGS(rx_sv) |= RXf_COPY_DONE)
+# define RXp_MATCH_COPIED_off(prog) (RXp_EXTFLAGS(prog) &= ~RXf_COPY_DONE)
+# define RX_MATCH_COPIED_off(rx_sv) (RX_EXTFLAGS(rx_sv) &= ~RXf_COPY_DONE)
+# define RX_MATCH_COPIED_set(rx_sv,t) ((t) \
? RX_MATCH_COPIED_on(rx_sv) \
: RX_MATCH_COPIED_off(rx_sv))
-#define RXp_EXTFLAGS(rx) ((rx)->extflags)
-#define RXp_COMPFLAGS(rx) ((rx)->compflags)
+# define RXp_EXTFLAGS(rx) ((rx)->extflags)
+# define RXp_COMPFLAGS(rx) ((rx)->compflags)
/* For source compatibility. We used to store these explicitly. */
-#define RX_PRECOMP(rx_sv) (RX_WRAPPED(rx_sv) \
+# define RX_PRECOMP(rx_sv) (RX_WRAPPED(rx_sv) \
+ ReANY(rx_sv)->pre_prefix)
-#define RX_PRECOMP_const(rx_sv) (RX_WRAPPED_const(rx_sv) \
+# define RX_PRECOMP_const(rx_sv) (RX_WRAPPED_const(rx_sv) \
+ ReANY(rx_sv)->pre_prefix)
/* FIXME? Are we hardcoding too much here and constraining plugin extension
writers? Specifically, the value 1 assumes that the wrapped version always
has exactly one character at the end, a ')'. Will that always be true? */
-#define RX_PRELEN(rx_sv) (RX_WRAPLEN(rx_sv) \
+# define RX_PRELEN(rx_sv) (RX_WRAPLEN(rx_sv) \
- ReANY(rx_sv)->pre_prefix - 1)
-#define RX_WRAPPED(rx_sv) SvPVX(rx_sv)
-#define RX_WRAPPED_const(rx_sv) SvPVX_const(rx_sv)
-#define RX_WRAPLEN(rx_sv) SvCUR(rx_sv)
-#define RX_CHECK_SUBSTR(rx_sv) (ReANY(rx_sv)->check_substr)
-#define RX_REFCNT(rx_sv) SvREFCNT(rx_sv)
-#define RX_EXTFLAGS(rx_sv) RXp_EXTFLAGS(ReANY(rx_sv))
-#define RX_COMPFLAGS(rx_sv) RXp_COMPFLAGS(ReANY(rx_sv))
-#define RXp_ENGINE(prog) ((prog)->engine)
-#define RX_ENGINE(rx_sv) (RXp_ENGINE(ReANY(rx_sv)))
-#define RXp_SUBBEG(prog) (prog->subbeg)
-#define RX_SUBBEG(rx_sv) (RXp_SUBBEG(ReANY(rx_sv)))
-#define RXp_SUBOFFSET(prog) (prog->suboffset)
-#define RX_SUBOFFSET(rx_sv) (RXp_SUBOFFSET(ReANY(rx_sv)))
-#define RX_SUBCOFFSET(rx_sv) (ReANY(rx_sv)->subcoffset)
-#define RXp_OFFS(prog) (prog->offs)
-#define RX_OFFS(rx_sv) (RXp_OFFS(ReANY(rx_sv)))
-#define RXp_NPARENS(prog) (prog->nparens)
-#define RX_NPARENS(rx_sv) (RXp_NPARENS(ReANY(rx_sv)))
-#define RX_SUBLEN(rx_sv) (ReANY(rx_sv)->sublen)
-#define RXp_MINLEN(prog) (prog->minlen)
-#define RX_MINLEN(rx_sv) (RXp_MINLEN(ReANY(rx_sv)))
-#define RXp_MINLENRET(prog) (prog->minlenret)
-#define RX_MINLENRET(rx_sv) (RXp_MINLENRET(ReANY(rx_sv)))
-#define RXp_GOFS(prog) (prog->gofs)
-#define RX_GOFS(rx_sv) (RXp_GOFS(ReANY(rx_sv)))
-#define RX_LASTPAREN(rx_sv) (ReANY(rx_sv)->lastparen)
-#define RX_LASTCLOSEPAREN(rx_sv) (ReANY(rx_sv)->lastcloseparen)
-#define RXp_SAVED_COPY(prog) (prog->saved_copy)
-#define RX_SAVED_COPY(rx_sv) (RXp_SAVED_COPY(ReANY(rx_sv)))
+# define RX_WRAPPED(rx_sv) SvPVX(rx_sv)
+# define RX_WRAPPED_const(rx_sv) SvPVX_const(rx_sv)
+# define RX_WRAPLEN(rx_sv) SvCUR(rx_sv)
+# define RX_CHECK_SUBSTR(rx_sv) (ReANY(rx_sv)->check_substr)
+# define RX_REFCNT(rx_sv) SvREFCNT(rx_sv)
+# define RX_EXTFLAGS(rx_sv) RXp_EXTFLAGS(ReANY(rx_sv))
+# define RX_COMPFLAGS(rx_sv) RXp_COMPFLAGS(ReANY(rx_sv))
+# define RXp_ENGINE(prog) ((prog)->engine)
+# define RX_ENGINE(rx_sv) (RXp_ENGINE(ReANY(rx_sv)))
+# define RXp_SUBBEG(prog) (prog->subbeg)
+# define RX_SUBBEG(rx_sv) (RXp_SUBBEG(ReANY(rx_sv)))
+# define RXp_SUBOFFSET(prog) (prog->suboffset)
+# define RX_SUBOFFSET(rx_sv) (RXp_SUBOFFSET(ReANY(rx_sv)))
+# define RX_SUBCOFFSET(rx_sv) (ReANY(rx_sv)->subcoffset)
+# define RXp_OFFS(prog) (prog->offs)
+# define RX_OFFS(rx_sv) (RXp_OFFS(ReANY(rx_sv)))
+# define RXp_NPARENS(prog) (prog->nparens)
+# define RX_NPARENS(rx_sv) (RXp_NPARENS(ReANY(rx_sv)))
+# define RX_SUBLEN(rx_sv) (ReANY(rx_sv)->sublen)
+# define RXp_MINLEN(prog) (prog->minlen)
+# define RX_MINLEN(rx_sv) (RXp_MINLEN(ReANY(rx_sv)))
+# define RXp_MINLENRET(prog) (prog->minlenret)
+# define RX_MINLENRET(rx_sv) (RXp_MINLENRET(ReANY(rx_sv)))
+# define RXp_GOFS(prog) (prog->gofs)
+# define RX_GOFS(rx_sv) (RXp_GOFS(ReANY(rx_sv)))
+# define RX_LASTPAREN(rx_sv) (ReANY(rx_sv)->lastparen)
+# define RX_LASTCLOSEPAREN(rx_sv) (ReANY(rx_sv)->lastcloseparen)
+# define RXp_SAVED_COPY(prog) (prog->saved_copy)
+# define RX_SAVED_COPY(rx_sv) (RXp_SAVED_COPY(ReANY(rx_sv)))
/* last match was zero-length */
-#define RXp_ZERO_LEN(prog) \
+# define RXp_ZERO_LEN(prog) \
(RXp_OFFS(prog)[0].start + (SSize_t)RXp_GOFS(prog) \
== RXp_OFFS(prog)[0].end)
-#define RX_ZERO_LEN(rx_sv) (RXp_ZERO_LEN(ReANY(rx_sv)))
+# define RX_ZERO_LEN(rx_sv) (RXp_ZERO_LEN(ReANY(rx_sv)))
#endif /* PLUGGABLE_RE_EXTENSION */
/* Stuff that needs to be included in the pluggable extension goes below here */
#ifdef PERL_ANY_COW
-#define RXp_MATCH_COPY_FREE(prog) \
+# define RXp_MATCH_COPY_FREE(prog) \
STMT_START {if (RXp_SAVED_COPY(prog)) { \
SV_CHECK_THINKFIRST_COW_DROP(RXp_SAVED_COPY(prog)); \
} \
@@ -567,7 +566,7 @@ and check for NULL.
RXp_MATCH_COPIED_off(prog); \
}} STMT_END
#else
-#define RXp_MATCH_COPY_FREE(prog) \
+# define RXp_MATCH_COPY_FREE(prog) \
STMT_START {if (RXp_MATCH_COPIED(prog)) { \
Safefree(RXp_SUBBEG(prog)); \
RXp_MATCH_COPIED_off(prog); \
@@ -608,7 +607,7 @@ and check for NULL.
the start pos (so s/.\G// would fail
on second iteration */
-#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+#if defined(PERL_USE_GCC_BRACE_GROUPS)
# define ReREFCNT_inc(re) \
({ \
/* This is here to generate a casting warning if incorrect. */ \
@@ -675,12 +674,17 @@ typedef struct {
} regmatch_info_aux;
-/* some basic information about the current match that is created by
- * Perl_regexec_flags and then passed to regtry(), regmatch() etc.
- * It is allocated as a local var on the stack, so nothing should be
- * stored in it that needs preserving or clearing up on croak().
- * For that, see the aux_info and aux_info_eval members of the
- * regmatch_state union. */
+/*
+=for apidoc Ay||regmatch_info
+Some basic information about the current match that is created by
+Perl_regexec_flags and then passed to regtry(), regmatch() etc.
+It is allocated as a local var on the stack, so nothing should be
+stored in it that needs preserving or clearing up on croak().
+For that, see the aux_info and aux_info_eval members of the
+regmatch_state union.
+
+=cut
+*/
typedef struct {
REGEXP *prog; /* the regex being executed */
@@ -705,9 +709,36 @@ typedef struct {
/* structures for holding and saving the state maintained by regmatch() */
#ifndef MAX_RECURSE_EVAL_NOCHANGE_DEPTH
-#define MAX_RECURSE_EVAL_NOCHANGE_DEPTH 10
+# define MAX_RECURSE_EVAL_NOCHANGE_DEPTH 10
#endif
+/* The +1 is because everything matches itself, which isn't included in
+ * MAX_FOLD_FROMS; the +2 is based on the current Unicode standards needs, and
+ * is unlikely to change. An assertion should fail in regexec.c if it is too
+ * low. It is needed for certain edge cases involving multi-character folds
+ * when the first component also participates in a fold individually. */
+#define MAX_MATCHES (MAX_FOLD_FROMS + 1 + 2)
+
+struct next_matchable_info {
+ U8 first_byte_mask;
+ U8 first_byte_anded;
+ U32 mask32;
+ U32 anded32;
+ PERL_INT_FAST8_T count; /* Negative means not initialized */
+ PERL_UINT_FAST8_T min_length;
+ PERL_UINT_FAST8_T max_length;
+ PERL_UINT_FAST8_T initial_definitive;
+ PERL_UINT_FAST8_T initial_exact;
+ PERL_UINT_FAST8_T lengths[MAX_MATCHES];
+
+ /* The size is from trial and error, and could change with new Unicode
+ * standards, in which case there is an assertion that should start
+ * failing. This size could be calculated in one of the regen scripts
+ * dealing with Unicode, but khw thinks the likelihood of it changing is
+ * low enough that it isn't worth the effort. */
+ U8 matches[18];
+};
+
typedef I32 CHECKPOINT;
typedef struct regmatch_state {
@@ -856,7 +887,6 @@ typedef struct regmatch_state {
struct {
/* this first element must match u.yes */
struct regmatch_state *prev_yes_state;
- int c1, c2; /* case fold search */
CHECKPOINT cp;
U32 lastparen;
U32 lastcloseparen;
@@ -865,8 +895,7 @@ typedef struct regmatch_state {
bool minmod;
regnode *A, *B; /* the nodes corresponding to /A*B/ */
regnode *me; /* the curlym node */
- U8 c1_utf8[UTF8_MAXBYTES+1]; /* */
- U8 c2_utf8[UTF8_MAXBYTES+1];
+ struct next_matchable_info Binfo;
} curlym;
struct {
@@ -874,14 +903,12 @@ typedef struct regmatch_state {
CHECKPOINT cp;
U32 lastparen;
U32 lastcloseparen;
- int c1, c2; /* case fold search */
char *maxpos; /* highest possible point in string to match */
char *oldloc; /* the previous locinput */
int count;
int min, max; /* {m,n} */
regnode *A, *B; /* the nodes corresponding to /A*B/ */
- U8 c1_utf8[UTF8_MAXBYTES+1]; /* */
- U8 c2_utf8[UTF8_MAXBYTES+1];
+ struct next_matchable_info Binfo;
} curly; /* and CURLYN/PLUS/STAR */
} u;
diff --git a/Master/tlpkg/tlperl/lib/CORE/regnodes.h b/Master/tlpkg/tlperl/lib/CORE/regnodes.h
index 46e090f39c5..94b71102eb3 100644
--- a/Master/tlpkg/tlperl/lib/CORE/regnodes.h
+++ b/Master/tlpkg/tlperl/lib/CORE/regnodes.h
@@ -4,164 +4,1094 @@
Any changes made here will be lost!
*/
+#if defined(PERL_CORE) || defined(PERL_EXT_RE_BUILD)
+
/* Regops and State definitions */
#define REGNODE_MAX 109
#define REGMATCH_STATE_MAX 149
-#define END 0 /* 0000 End of program. */
-#define SUCCEED 1 /* 0x01 Return from a subroutine, basically. */
-#define SBOL 2 /* 0x02 Match "" at beginning of line: /^/, /\A/ */
-#define BOL 2 /* 0x02 type alias */
-#define MBOL 3 /* 0x03 Same, assuming multiline: /^/m */
-#define SEOL 4 /* 0x04 Match "" at end of line: /$/ */
-#define EOL 4 /* 0x04 type alias */
-#define MEOL 5 /* 0x05 Same, assuming multiline: /$/m */
-#define EOS 6 /* 0x06 Match "" at end of string: /\z/ */
-#define GPOS 7 /* 0x07 Matches where last m//g left off. */
-#define BOUND 8 /* 0x08 Like BOUNDA for non-utf8, otherwise like BOUNDU */
-#define BOUNDL 9 /* 0x09 Like BOUND/BOUNDU, but \w and \W are defined by current locale */
-#define BOUNDU 10 /* 0x0a Match "" at any boundary of a given type using /u rules. */
-#define BOUNDA 11 /* 0x0b Match "" at any boundary between \w\W or \W\w, where \w is [_a-zA-Z0-9] */
-#define NBOUND 12 /* 0x0c Like NBOUNDA for non-utf8, otherwise like BOUNDU */
-#define NBOUNDL 13 /* 0x0d Like NBOUND/NBOUNDU, but \w and \W are defined by current locale */
-#define NBOUNDU 14 /* 0x0e Match "" at any non-boundary of a given type using using /u rules. */
-#define NBOUNDA 15 /* 0x0f Match "" betweeen any \w\w or \W\W, where \w is [_a-zA-Z0-9] */
-#define REG_ANY 16 /* 0x10 Match any one character (except newline). */
-#define SANY 17 /* 0x11 Match any one character. */
-#define ANYOF 18 /* 0x12 Match character in (or not in) this class, single char match only */
-#define ANYOFD 19 /* 0x13 Like ANYOF, but /d is in effect */
-#define ANYOFL 20 /* 0x14 Like ANYOF, but /l is in effect */
-#define ANYOFPOSIXL 21 /* 0x15 Like ANYOFL, but matches [[:posix:]] classes */
-#define ANYOFH 22 /* 0x16 Like ANYOF, but only has "High" matches, none in the bitmap; the flags field contains the lowest matchable UTF-8 start byte */
-#define ANYOFHb 23 /* 0x17 Like ANYOFH, but all matches share the same UTF-8 start byte, given in the flags field */
-#define ANYOFHr 24 /* 0x18 Like ANYOFH, but the flags field contains packed bounds for all matchable UTF-8 start bytes. */
-#define ANYOFHs 25 /* 0x19 Like ANYOFHb, but has a string field that gives the leading matchable UTF-8 bytes; flags field is len */
-#define ANYOFR 26 /* 0x1a Matches any character in the range given by its packed args: upper 12 bits is the max delta from the base lower 20; the flags field contains the lowest matchable UTF-8 start byte */
-#define ANYOFRb 27 /* 0x1b Like ANYOFR, but all matches share the same UTF-8 start byte, given in the flags field */
-#define ANYOFM 28 /* 0x1c Like ANYOF, but matches an invariant byte as determined by the mask and arg */
-#define NANYOFM 29 /* 0x1d complement of ANYOFM */
-#define POSIXD 30 /* 0x1e Some [[:class:]] under /d; the FLAGS field gives which one */
-#define POSIXL 31 /* 0x1f Some [[:class:]] under /l; the FLAGS field gives which one */
-#define POSIXU 32 /* 0x20 Some [[:class:]] under /u; the FLAGS field gives which one */
-#define POSIXA 33 /* 0x21 Some [[:class:]] under /a; the FLAGS field gives which one */
-#define NPOSIXD 34 /* 0x22 complement of POSIXD, [[:^class:]] */
-#define NPOSIXL 35 /* 0x23 complement of POSIXL, [[:^class:]] */
-#define NPOSIXU 36 /* 0x24 complement of POSIXU, [[:^class:]] */
-#define NPOSIXA 37 /* 0x25 complement of POSIXA, [[:^class:]] */
-#define CLUMP 38 /* 0x26 Match any extended grapheme cluster sequence */
-#define BRANCH 39 /* 0x27 Match this alternative, or the next... */
-#define EXACT 40 /* 0x28 Match this string (flags field is the length). */
-#define LEXACT 41 /* 0x29 Match this long string (preceded by length; flags unused). */
-#define EXACTL 42 /* 0x2a Like EXACT, but /l is in effect (used so locale-related warnings can be checked for) */
-#define EXACTF 43 /* 0x2b Like EXACT, but match using /id rules; (string not UTF-8, ASCII folded; non-ASCII not) */
-#define EXACTFL 44 /* 0x2c Like EXACT, but match using /il rules; (string not likely to be folded) */
-#define EXACTFU 45 /* 0x2d Like EXACT, but match using /iu rules; (string folded) */
-#define EXACTFAA 46 /* 0x2e Like EXACT, but match using /iaa rules; (string folded except in non-UTF8 patterns: MICRO, SHARP S; folded length <= unfolded) */
-#define EXACTFUP 47 /* 0x2f Like EXACT, but match using /iu rules; (string not UTF-8, folded except MICRO, SHARP S: hence Problematic) */
-#define EXACTFLU8 48 /* 0x30 Like EXACTFU, but use /il, UTF-8, (string is folded, and everything in it is above 255 */
-#define EXACTFAA_NO_TRIE 49 /* 0x31 Like EXACT, but match using /iaa rules (string not UTF-8, not guaranteed to be folded, not currently trie-able) */
-#define EXACT_REQ8 50 /* 0x32 Like EXACT, but only UTF-8 encoded targets can match */
-#define LEXACT_REQ8 51 /* 0x33 Like LEXACT, but only UTF-8 encoded targets can match */
-#define EXACTFU_REQ8 52 /* 0x34 Like EXACTFU, but only UTF-8 encoded targets can match */
-#define EXACTFU_S_EDGE 53 /* 0x35 /di rules, but nothing in it precludes /ui, except begins and/or ends with [Ss]; (string not UTF-8; compile-time only) */
-#define NOTHING 54 /* 0x36 Match empty string. */
-#define TAIL 55 /* 0x37 Match empty string. Can jump here from outside. */
-#define STAR 56 /* 0x38 Match this (simple) thing 0 or more times. */
-#define PLUS 57 /* 0x39 Match this (simple) thing 1 or more times. */
-#define CURLY 58 /* 0x3a Match this simple thing {n,m} times. */
-#define CURLYN 59 /* 0x3b Capture next-after-this simple thing */
-#define CURLYM 60 /* 0x3c Capture this medium-complex thing {n,m} times. */
-#define CURLYX 61 /* 0x3d Match this complex thing {n,m} times. */
-#define WHILEM 62 /* 0x3e Do curly processing and see if rest matches. */
-#define OPEN 63 /* 0x3f Mark this point in input as start of #n. */
-#define CLOSE 64 /* 0x40 Close corresponding OPEN of #n. */
-#define SROPEN 65 /* 0x41 Same as OPEN, but for script run */
-#define SRCLOSE 66 /* 0x42 Close preceding SROPEN */
-#define REF 67 /* 0x43 Match some already matched string */
-#define REFF 68 /* 0x44 Match already matched string, using /di rules. */
-#define REFFL 69 /* 0x45 Match already matched string, using /li rules. */
-#define REFFU 70 /* 0x46 Match already matched string, usng /ui. */
-#define REFFA 71 /* 0x47 Match already matched string, using /aai rules. */
-#define REFN 72 /* 0x48 Match some already matched string */
-#define REFFN 73 /* 0x49 Match already matched string, using /di rules. */
-#define REFFLN 74 /* 0x4a Match already matched string, using /li rules. */
-#define REFFUN 75 /* 0x4b Match already matched string, using /ui rules. */
-#define REFFAN 76 /* 0x4c Match already matched string, using /aai rules. */
-#define LONGJMP 77 /* 0x4d Jump far away. */
-#define BRANCHJ 78 /* 0x4e BRANCH with long offset. */
-#define IFMATCH 79 /* 0x4f Succeeds if the following matches; non-zero flags "f", next_off "o" means lookbehind assertion starting "f..(f-o)" characters before current */
-#define UNLESSM 80 /* 0x50 Fails if the following matches; non-zero flags "f", next_off "o" means lookbehind assertion starting "f..(f-o)" characters before current */
-#define SUSPEND 81 /* 0x51 "Independent" sub-RE. */
-#define IFTHEN 82 /* 0x52 Switch, should be preceded by switcher. */
-#define GROUPP 83 /* 0x53 Whether the group matched. */
-#define EVAL 84 /* 0x54 Execute some Perl code. */
-#define MINMOD 85 /* 0x55 Next operator is not greedy. */
-#define LOGICAL 86 /* 0x56 Next opcode should set the flag only. */
-#define RENUM 87 /* 0x57 Group with independently numbered parens. */
-#define TRIE 88 /* 0x58 Match many EXACT(F[ALU]?)? at once. flags==type */
-#define TRIEC 89 /* 0x59 Same as TRIE, but with embedded charclass data */
-#define AHOCORASICK 90 /* 0x5a Aho Corasick stclass. flags==type */
-#define AHOCORASICKC 91 /* 0x5b Same as AHOCORASICK, but with embedded charclass data */
-#define GOSUB 92 /* 0x5c recurse to paren arg1 at (signed) ofs arg2 */
-#define GROUPPN 93 /* 0x5d Whether the group matched. */
-#define INSUBP 94 /* 0x5e Whether we are in a specific recurse. */
-#define DEFINEP 95 /* 0x5f Never execute directly. */
-#define ENDLIKE 96 /* 0x60 Used only for the type field of verbs */
-#define OPFAIL 97 /* 0x61 Same as (?!), but with verb arg */
-#define ACCEPT 98 /* 0x62 Accepts the current matched string, with verbar */
-#define VERB 99 /* 0x63 Used only for the type field of verbs */
-#define PRUNE 100 /* 0x64 Pattern fails at this startpoint if no-backtracking through this */
-#define MARKPOINT 101 /* 0x65 Push the current location for rollback by cut. */
-#define SKIP 102 /* 0x66 On failure skip forward (to the mark) before retrying */
-#define COMMIT 103 /* 0x67 Pattern fails outright if backtracking through this */
-#define CUTGROUP 104 /* 0x68 On failure go to the next alternation in the group */
-#define KEEPS 105 /* 0x69 $& begins here. */
-#define LNBREAK 106 /* 0x6a generic newline pattern */
-#define OPTIMIZED 107 /* 0x6b Placeholder for dump. */
-#define PSEUDO 108 /* 0x6c Pseudo opcode for internal use. */
-#define REGEX_SET 109 /* 0x6d Regex set, temporary node used in pre-optimization compilation */
+/* -- For regexec.c to switch on target being utf8 (t8) or not (tb, b='byte');
+ * same with pattern (p8, pb) -- */
+#define with_tp_UTF8ness(op, t_utf8, p_utf8) \
+ (((op) << 2) + (cBOOL(t_utf8) << 1) + cBOOL(p_utf8))
+
+/* The #defines below give both the basic regnode and the expanded version for
+ switching on utf8ness */
+#define END 0 /* 0x00 End of program. */
+#define END_tb_pb 0 /* 0x000 */
+#define END_tb_p8 1 /* 0x001 */
+#define END_t8_pb 2 /* 0x002 */
+#define END_t8_p8 3 /* 0x003 */
+
+#define SUCCEED 1 /* 0x01 Return from a subroutine,
+ basically. */
+#define SUCCEED_tb_pb 4 /* 0x004 */
+#define SUCCEED_tb_p8 5 /* 0x005 */
+#define SUCCEED_t8_pb 6 /* 0x006 */
+#define SUCCEED_t8_p8 7 /* 0x007 */
+
+#define SBOL 2 /* 0x02 Match "" at beginning of
+ line: /^/, /\A/ */
+#define SBOL_tb_pb 8 /* 0x008 */
+#define SBOL_tb_p8 9 /* 0x009 */
+#define SBOL_t8_pb 10 /* 0x00a */
+#define SBOL_t8_p8 11 /* 0x00b */
+
+#define BOL 2 /* 0x02 Match "" at beginning of
+ line: /^/, /\A/ */
+#define BOL_tb_pb 8 /* 0x008 */
+#define BOL_tb_p8 9 /* 0x009 */
+#define BOL_t8_pb 10 /* 0x00a */
+#define BOL_t8_p8 11 /* 0x00b */
+
+#define MBOL 3 /* 0x03 Same, assuming multiline:
+ /^/m */
+#define MBOL_tb_pb 12 /* 0x00c */
+#define MBOL_tb_p8 13 /* 0x00d */
+#define MBOL_t8_pb 14 /* 0x00e */
+#define MBOL_t8_p8 15 /* 0x00f */
+
+#define SEOL 4 /* 0x04 Match "" at end of line:
+ /$/ */
+#define SEOL_tb_pb 16 /* 0x010 */
+#define SEOL_tb_p8 17 /* 0x011 */
+#define SEOL_t8_pb 18 /* 0x012 */
+#define SEOL_t8_p8 19 /* 0x013 */
+
+#define EOL 4 /* 0x04 Match "" at end of line:
+ /$/ */
+#define EOL_tb_pb 16 /* 0x010 */
+#define EOL_tb_p8 17 /* 0x011 */
+#define EOL_t8_pb 18 /* 0x012 */
+#define EOL_t8_p8 19 /* 0x013 */
+
+#define MEOL 5 /* 0x05 Same, assuming multiline:
+ /$/m */
+#define MEOL_tb_pb 20 /* 0x014 */
+#define MEOL_tb_p8 21 /* 0x015 */
+#define MEOL_t8_pb 22 /* 0x016 */
+#define MEOL_t8_p8 23 /* 0x017 */
+
+#define EOS 6 /* 0x06 Match "" at end of string:
+ /\z/ */
+#define EOS_tb_pb 24 /* 0x018 */
+#define EOS_tb_p8 25 /* 0x019 */
+#define EOS_t8_pb 26 /* 0x01a */
+#define EOS_t8_p8 27 /* 0x01b */
+
+#define GPOS 7 /* 0x07 Matches where last m//g
+ left off. */
+#define GPOS_tb_pb 28 /* 0x01c */
+#define GPOS_tb_p8 29 /* 0x01d */
+#define GPOS_t8_pb 30 /* 0x01e */
+#define GPOS_t8_p8 31 /* 0x01f */
+
+#define BOUND 8 /* 0x08 Like BOUNDA for non-utf8,
+ otherwise like BOUNDU */
+#define BOUND_tb_pb 32 /* 0x020 */
+#define BOUND_tb_p8 33 /* 0x021 */
+#define BOUND_t8_pb 34 /* 0x022 */
+#define BOUND_t8_p8 35 /* 0x023 */
+
+#define BOUNDL 9 /* 0x09 Like BOUND/BOUNDU, but \w
+ and \W are defined by current
+ locale */
+#define BOUNDL_tb_pb 36 /* 0x024 */
+#define BOUNDL_tb_p8 37 /* 0x025 */
+#define BOUNDL_t8_pb 38 /* 0x026 */
+#define BOUNDL_t8_p8 39 /* 0x027 */
+
+#define BOUNDU 10 /* 0x0a Match "" at any boundary
+ of a given type using /u rules.
+ */
+#define BOUNDU_tb_pb 40 /* 0x028 */
+#define BOUNDU_tb_p8 41 /* 0x029 */
+#define BOUNDU_t8_pb 42 /* 0x02a */
+#define BOUNDU_t8_p8 43 /* 0x02b */
+
+#define BOUNDA 11 /* 0x0b Match "" at any boundary
+ between \w\W or \W\w, where \w
+ is [_a-zA-Z0-9] */
+#define BOUNDA_tb_pb 44 /* 0x02c */
+#define BOUNDA_tb_p8 45 /* 0x02d */
+#define BOUNDA_t8_pb 46 /* 0x02e */
+#define BOUNDA_t8_p8 47 /* 0x02f */
+
+#define NBOUND 12 /* 0x0c Like NBOUNDA for non-utf8,
+ otherwise like BOUNDU */
+#define NBOUND_tb_pb 48 /* 0x030 */
+#define NBOUND_tb_p8 49 /* 0x031 */
+#define NBOUND_t8_pb 50 /* 0x032 */
+#define NBOUND_t8_p8 51 /* 0x033 */
+
+#define NBOUNDL 13 /* 0x0d Like NBOUND/NBOUNDU, but
+ \w and \W are defined by
+ current locale */
+#define NBOUNDL_tb_pb 52 /* 0x034 */
+#define NBOUNDL_tb_p8 53 /* 0x035 */
+#define NBOUNDL_t8_pb 54 /* 0x036 */
+#define NBOUNDL_t8_p8 55 /* 0x037 */
+
+#define NBOUNDU 14 /* 0x0e Match "" at any
+ non-boundary of a given type
+ using using /u rules. */
+#define NBOUNDU_tb_pb 56 /* 0x038 */
+#define NBOUNDU_tb_p8 57 /* 0x039 */
+#define NBOUNDU_t8_pb 58 /* 0x03a */
+#define NBOUNDU_t8_p8 59 /* 0x03b */
+
+#define NBOUNDA 15 /* 0x0f Match "" betweeen any \w\w
+ or \W\W, where \w is
+ [_a-zA-Z0-9] */
+#define NBOUNDA_tb_pb 60 /* 0x03c */
+#define NBOUNDA_tb_p8 61 /* 0x03d */
+#define NBOUNDA_t8_pb 62 /* 0x03e */
+#define NBOUNDA_t8_p8 63 /* 0x03f */
+
+#define REG_ANY 16 /* 0x10 Match any one character
+ (except newline). */
+#define REG_ANY_tb_pb 64 /* 0x040 */
+#define REG_ANY_tb_p8 65 /* 0x041 */
+#define REG_ANY_t8_pb 66 /* 0x042 */
+#define REG_ANY_t8_p8 67 /* 0x043 */
+
+#define SANY 17 /* 0x11 Match any one character.
+ */
+#define SANY_tb_pb 68 /* 0x044 */
+#define SANY_tb_p8 69 /* 0x045 */
+#define SANY_t8_pb 70 /* 0x046 */
+#define SANY_t8_p8 71 /* 0x047 */
+
+#define ANYOF 18 /* 0x12 Match character in (or not
+ in) this class, single char
+ match only */
+#define ANYOF_tb_pb 72 /* 0x048 */
+#define ANYOF_tb_p8 73 /* 0x049 */
+#define ANYOF_t8_pb 74 /* 0x04a */
+#define ANYOF_t8_p8 75 /* 0x04b */
+
+#define ANYOFD 19 /* 0x13 Like ANYOF, but /d is in
+ effect */
+#define ANYOFD_tb_pb 76 /* 0x04c */
+#define ANYOFD_tb_p8 77 /* 0x04d */
+#define ANYOFD_t8_pb 78 /* 0x04e */
+#define ANYOFD_t8_p8 79 /* 0x04f */
+
+#define ANYOFL 20 /* 0x14 Like ANYOF, but /l is in
+ effect */
+#define ANYOFL_tb_pb 80 /* 0x050 */
+#define ANYOFL_tb_p8 81 /* 0x051 */
+#define ANYOFL_t8_pb 82 /* 0x052 */
+#define ANYOFL_t8_p8 83 /* 0x053 */
+
+#define ANYOFPOSIXL 21 /* 0x15 Like ANYOFL, but matches
+ [[:posix:]] classes */
+#define ANYOFPOSIXL_tb_pb 84 /* 0x054 */
+#define ANYOFPOSIXL_tb_p8 85 /* 0x055 */
+#define ANYOFPOSIXL_t8_pb 86 /* 0x056 */
+#define ANYOFPOSIXL_t8_p8 87 /* 0x057 */
+
+#define ANYOFH 22 /* 0x16 Like ANYOF, but only has
+ "High" matches, none in the
+ bitmap; the flags field
+ contains the lowest matchable
+ UTF-8 start byte */
+#define ANYOFH_tb_pb 88 /* 0x058 */
+#define ANYOFH_tb_p8 89 /* 0x059 */
+#define ANYOFH_t8_pb 90 /* 0x05a */
+#define ANYOFH_t8_p8 91 /* 0x05b */
+
+#define ANYOFHb 23 /* 0x17 Like ANYOFH, but all
+ matches share the same UTF-8
+ start byte, given in the flags
+ field */
+#define ANYOFHb_tb_pb 92 /* 0x05c */
+#define ANYOFHb_tb_p8 93 /* 0x05d */
+#define ANYOFHb_t8_pb 94 /* 0x05e */
+#define ANYOFHb_t8_p8 95 /* 0x05f */
+
+#define ANYOFHr 24 /* 0x18 Like ANYOFH, but the flags
+ field contains packed bounds
+ for all matchable UTF-8 start
+ bytes. */
+#define ANYOFHr_tb_pb 96 /* 0x060 */
+#define ANYOFHr_tb_p8 97 /* 0x061 */
+#define ANYOFHr_t8_pb 98 /* 0x062 */
+#define ANYOFHr_t8_p8 99 /* 0x063 */
+
+#define ANYOFHs 25 /* 0x19 Like ANYOFHb, but has a
+ string field that gives the
+ leading matchable UTF-8 bytes;
+ flags field is len */
+#define ANYOFHs_tb_pb 100 /* 0x064 */
+#define ANYOFHs_tb_p8 101 /* 0x065 */
+#define ANYOFHs_t8_pb 102 /* 0x066 */
+#define ANYOFHs_t8_p8 103 /* 0x067 */
+
+#define ANYOFR 26 /* 0x1a Matches any character in
+ the range given by its packed
+ args: upper 12 bits is the max
+ delta from the base lower 20;
+ the flags field contains the
+ lowest matchable UTF-8 start
+ byte */
+#define ANYOFR_tb_pb 104 /* 0x068 */
+#define ANYOFR_tb_p8 105 /* 0x069 */
+#define ANYOFR_t8_pb 106 /* 0x06a */
+#define ANYOFR_t8_p8 107 /* 0x06b */
+
+#define ANYOFRb 27 /* 0x1b Like ANYOFR, but all
+ matches share the same UTF-8
+ start byte, given in the flags
+ field */
+#define ANYOFRb_tb_pb 108 /* 0x06c */
+#define ANYOFRb_tb_p8 109 /* 0x06d */
+#define ANYOFRb_t8_pb 110 /* 0x06e */
+#define ANYOFRb_t8_p8 111 /* 0x06f */
+
+#define ANYOFM 28 /* 0x1c Like ANYOF, but matches an
+ invariant byte as determined by
+ the mask and arg */
+#define ANYOFM_tb_pb 112 /* 0x070 */
+#define ANYOFM_tb_p8 113 /* 0x071 */
+#define ANYOFM_t8_pb 114 /* 0x072 */
+#define ANYOFM_t8_p8 115 /* 0x073 */
+
+#define NANYOFM 29 /* 0x1d complement of ANYOFM */
+#define NANYOFM_tb_pb 116 /* 0x074 */
+#define NANYOFM_tb_p8 117 /* 0x075 */
+#define NANYOFM_t8_pb 118 /* 0x076 */
+#define NANYOFM_t8_p8 119 /* 0x077 */
+
+#define POSIXD 30 /* 0x1e Some [[:class:]] under /d;
+ the FLAGS field gives which one
+ */
+#define POSIXD_tb_pb 120 /* 0x078 */
+#define POSIXD_tb_p8 121 /* 0x079 */
+#define POSIXD_t8_pb 122 /* 0x07a */
+#define POSIXD_t8_p8 123 /* 0x07b */
+
+#define POSIXL 31 /* 0x1f Some [[:class:]] under /l;
+ the FLAGS field gives which one
+ */
+#define POSIXL_tb_pb 124 /* 0x07c */
+#define POSIXL_tb_p8 125 /* 0x07d */
+#define POSIXL_t8_pb 126 /* 0x07e */
+#define POSIXL_t8_p8 127 /* 0x07f */
+
+#define POSIXU 32 /* 0x20 Some [[:class:]] under /u;
+ the FLAGS field gives which one
+ */
+#define POSIXU_tb_pb 128 /* 0x080 */
+#define POSIXU_tb_p8 129 /* 0x081 */
+#define POSIXU_t8_pb 130 /* 0x082 */
+#define POSIXU_t8_p8 131 /* 0x083 */
+
+#define POSIXA 33 /* 0x21 Some [[:class:]] under /a;
+ the FLAGS field gives which one
+ */
+#define POSIXA_tb_pb 132 /* 0x084 */
+#define POSIXA_tb_p8 133 /* 0x085 */
+#define POSIXA_t8_pb 134 /* 0x086 */
+#define POSIXA_t8_p8 135 /* 0x087 */
+
+#define NPOSIXD 34 /* 0x22 complement of POSIXD,
+ [[:^class:]] */
+#define NPOSIXD_tb_pb 136 /* 0x088 */
+#define NPOSIXD_tb_p8 137 /* 0x089 */
+#define NPOSIXD_t8_pb 138 /* 0x08a */
+#define NPOSIXD_t8_p8 139 /* 0x08b */
+
+#define NPOSIXL 35 /* 0x23 complement of POSIXL,
+ [[:^class:]] */
+#define NPOSIXL_tb_pb 140 /* 0x08c */
+#define NPOSIXL_tb_p8 141 /* 0x08d */
+#define NPOSIXL_t8_pb 142 /* 0x08e */
+#define NPOSIXL_t8_p8 143 /* 0x08f */
+
+#define NPOSIXU 36 /* 0x24 complement of POSIXU,
+ [[:^class:]] */
+#define NPOSIXU_tb_pb 144 /* 0x090 */
+#define NPOSIXU_tb_p8 145 /* 0x091 */
+#define NPOSIXU_t8_pb 146 /* 0x092 */
+#define NPOSIXU_t8_p8 147 /* 0x093 */
+
+#define NPOSIXA 37 /* 0x25 complement of POSIXA,
+ [[:^class:]] */
+#define NPOSIXA_tb_pb 148 /* 0x094 */
+#define NPOSIXA_tb_p8 149 /* 0x095 */
+#define NPOSIXA_t8_pb 150 /* 0x096 */
+#define NPOSIXA_t8_p8 151 /* 0x097 */
+
+#define CLUMP 38 /* 0x26 Match any extended
+ grapheme cluster sequence */
+#define CLUMP_tb_pb 152 /* 0x098 */
+#define CLUMP_tb_p8 153 /* 0x099 */
+#define CLUMP_t8_pb 154 /* 0x09a */
+#define CLUMP_t8_p8 155 /* 0x09b */
+
+#define BRANCH 39 /* 0x27 Match this alternative, or
+ the next... */
+#define BRANCH_tb_pb 156 /* 0x09c */
+#define BRANCH_tb_p8 157 /* 0x09d */
+#define BRANCH_t8_pb 158 /* 0x09e */
+#define BRANCH_t8_p8 159 /* 0x09f */
+
+#define EXACT 40 /* 0x28 Match this string (flags
+ field is the length). */
+#define EXACT_tb_pb 160 /* 0x0a0 */
+#define EXACT_tb_p8 161 /* 0x0a1 */
+#define EXACT_t8_pb 162 /* 0x0a2 */
+#define EXACT_t8_p8 163 /* 0x0a3 */
+
+#define LEXACT 41 /* 0x29 Match this long string
+ (preceded by length; flags
+ unused). */
+#define LEXACT_tb_pb 164 /* 0x0a4 */
+#define LEXACT_tb_p8 165 /* 0x0a5 */
+#define LEXACT_t8_pb 166 /* 0x0a6 */
+#define LEXACT_t8_p8 167 /* 0x0a7 */
+
+#define EXACTL 42 /* 0x2a Like EXACT, but /l is in
+ effect (used so locale-related
+ warnings can be checked for) */
+#define EXACTL_tb_pb 168 /* 0x0a8 */
+#define EXACTL_tb_p8 169 /* 0x0a9 */
+#define EXACTL_t8_pb 170 /* 0x0aa */
+#define EXACTL_t8_p8 171 /* 0x0ab */
+
+#define EXACTF 43 /* 0x2b Like EXACT, but match
+ using /id rules; (string not
+ UTF-8, ASCII folded; non-ASCII
+ not) */
+#define EXACTF_tb_pb 172 /* 0x0ac */
+#define EXACTF_tb_p8 173 /* 0x0ad */
+#define EXACTF_t8_pb 174 /* 0x0ae */
+#define EXACTF_t8_p8 175 /* 0x0af */
+
+#define EXACTFL 44 /* 0x2c Like EXACT, but match
+ using /il rules; (string not
+ likely to be folded) */
+#define EXACTFL_tb_pb 176 /* 0x0b0 */
+#define EXACTFL_tb_p8 177 /* 0x0b1 */
+#define EXACTFL_t8_pb 178 /* 0x0b2 */
+#define EXACTFL_t8_p8 179 /* 0x0b3 */
+
+#define EXACTFU 45 /* 0x2d Like EXACT, but match
+ using /iu rules; (string
+ folded) */
+#define EXACTFU_tb_pb 180 /* 0x0b4 */
+#define EXACTFU_tb_p8 181 /* 0x0b5 */
+#define EXACTFU_t8_pb 182 /* 0x0b6 */
+#define EXACTFU_t8_p8 183 /* 0x0b7 */
+
+#define EXACTFAA 46 /* 0x2e Like EXACT, but match
+ using /iaa rules; (string
+ folded except MICRO in non-UTF8
+ patterns; doesn't contain SHARP
+ S unless UTF-8; folded length
+ <= unfolded) */
+#define EXACTFAA_tb_pb 184 /* 0x0b8 */
+#define EXACTFAA_tb_p8 185 /* 0x0b9 */
+#define EXACTFAA_t8_pb 186 /* 0x0ba */
+#define EXACTFAA_t8_p8 187 /* 0x0bb */
+
+#define EXACTFAA_NO_TRIE 47 /* 0x2f Like EXACTFAA, (string not
+ UTF-8, folded except: MICRO,
+ SHARP S; folded length <=
+ unfolded, not currently
+ trie-able) */
+#define EXACTFAA_NO_TRIE_tb_pb 188 /* 0x0bc */
+#define EXACTFAA_NO_TRIE_tb_p8 189 /* 0x0bd */
+#define EXACTFAA_NO_TRIE_t8_pb 190 /* 0x0be */
+#define EXACTFAA_NO_TRIE_t8_p8 191 /* 0x0bf */
+
+#define EXACTFUP 48 /* 0x30 Like EXACT, but match
+ using /iu rules; (string not
+ UTF-8, folded except MICRO:
+ hence Problematic) */
+#define EXACTFUP_tb_pb 192 /* 0x0c0 */
+#define EXACTFUP_tb_p8 193 /* 0x0c1 */
+#define EXACTFUP_t8_pb 194 /* 0x0c2 */
+#define EXACTFUP_t8_p8 195 /* 0x0c3 */
+
+#define EXACTFLU8 49 /* 0x31 Like EXACTFU, but use /il,
+ UTF-8, (string is folded, and
+ everything in it is above 255
+ */
+#define EXACTFLU8_tb_pb 196 /* 0x0c4 */
+#define EXACTFLU8_tb_p8 197 /* 0x0c5 */
+#define EXACTFLU8_t8_pb 198 /* 0x0c6 */
+#define EXACTFLU8_t8_p8 199 /* 0x0c7 */
+
+#define EXACT_REQ8 50 /* 0x32 Like EXACT, but only UTF-8
+ encoded targets can match */
+#define EXACT_REQ8_tb_pb 200 /* 0x0c8 */
+#define EXACT_REQ8_tb_p8 201 /* 0x0c9 */
+#define EXACT_REQ8_t8_pb 202 /* 0x0ca */
+#define EXACT_REQ8_t8_p8 203 /* 0x0cb */
+
+#define LEXACT_REQ8 51 /* 0x33 Like LEXACT, but only
+ UTF-8 encoded targets can match
+ */
+#define LEXACT_REQ8_tb_pb 204 /* 0x0cc */
+#define LEXACT_REQ8_tb_p8 205 /* 0x0cd */
+#define LEXACT_REQ8_t8_pb 206 /* 0x0ce */
+#define LEXACT_REQ8_t8_p8 207 /* 0x0cf */
+
+#define EXACTFU_REQ8 52 /* 0x34 Like EXACTFU, but only
+ UTF-8 encoded targets can match
+ */
+#define EXACTFU_REQ8_tb_pb 208 /* 0x0d0 */
+#define EXACTFU_REQ8_tb_p8 209 /* 0x0d1 */
+#define EXACTFU_REQ8_t8_pb 210 /* 0x0d2 */
+#define EXACTFU_REQ8_t8_p8 211 /* 0x0d3 */
+
+#define EXACTFU_S_EDGE 53 /* 0x35 /di rules, but nothing in
+ it precludes /ui, except begins
+ and/or ends with [Ss]; (string
+ not UTF-8; compile-time only)
+ */
+#define EXACTFU_S_EDGE_tb_pb 212 /* 0x0d4 */
+#define EXACTFU_S_EDGE_tb_p8 213 /* 0x0d5 */
+#define EXACTFU_S_EDGE_t8_pb 214 /* 0x0d6 */
+#define EXACTFU_S_EDGE_t8_p8 215 /* 0x0d7 */
+
+#define LNBREAK 54 /* 0x36 generic newline pattern */
+#define LNBREAK_tb_pb 216 /* 0x0d8 */
+#define LNBREAK_tb_p8 217 /* 0x0d9 */
+#define LNBREAK_t8_pb 218 /* 0x0da */
+#define LNBREAK_t8_p8 219 /* 0x0db */
+
+#define TRIE 55 /* 0x37 Match many EXACT(F[ALU]?)?
+ at once. flags==type */
+#define TRIE_tb_pb 220 /* 0x0dc */
+#define TRIE_tb_p8 221 /* 0x0dd */
+#define TRIE_t8_pb 222 /* 0x0de */
+#define TRIE_t8_p8 223 /* 0x0df */
+
+#define TRIEC 56 /* 0x38 Same as TRIE, but with
+ embedded charclass data */
+#define TRIEC_tb_pb 224 /* 0x0e0 */
+#define TRIEC_tb_p8 225 /* 0x0e1 */
+#define TRIEC_t8_pb 226 /* 0x0e2 */
+#define TRIEC_t8_p8 227 /* 0x0e3 */
+
+#define AHOCORASICK 57 /* 0x39 Aho Corasick stclass.
+ flags==type */
+#define AHOCORASICK_tb_pb 228 /* 0x0e4 */
+#define AHOCORASICK_tb_p8 229 /* 0x0e5 */
+#define AHOCORASICK_t8_pb 230 /* 0x0e6 */
+#define AHOCORASICK_t8_p8 231 /* 0x0e7 */
+
+#define AHOCORASICKC 58 /* 0x3a Same as AHOCORASICK, but
+ with embedded charclass data */
+#define AHOCORASICKC_tb_pb 232 /* 0x0e8 */
+#define AHOCORASICKC_tb_p8 233 /* 0x0e9 */
+#define AHOCORASICKC_t8_pb 234 /* 0x0ea */
+#define AHOCORASICKC_t8_p8 235 /* 0x0eb */
+
+#define NOTHING 59 /* 0x3b Match empty string. */
+#define NOTHING_tb_pb 236 /* 0x0ec */
+#define NOTHING_tb_p8 237 /* 0x0ed */
+#define NOTHING_t8_pb 238 /* 0x0ee */
+#define NOTHING_t8_p8 239 /* 0x0ef */
+
+#define TAIL 60 /* 0x3c Match empty string. Can
+ jump here from outside. */
+#define TAIL_tb_pb 240 /* 0x0f0 */
+#define TAIL_tb_p8 241 /* 0x0f1 */
+#define TAIL_t8_pb 242 /* 0x0f2 */
+#define TAIL_t8_p8 243 /* 0x0f3 */
+
+#define STAR 61 /* 0x3d Match this (simple) thing
+ 0 or more times. */
+#define STAR_tb_pb 244 /* 0x0f4 */
+#define STAR_tb_p8 245 /* 0x0f5 */
+#define STAR_t8_pb 246 /* 0x0f6 */
+#define STAR_t8_p8 247 /* 0x0f7 */
+
+#define PLUS 62 /* 0x3e Match this (simple) thing
+ 1 or more times. */
+#define PLUS_tb_pb 248 /* 0x0f8 */
+#define PLUS_tb_p8 249 /* 0x0f9 */
+#define PLUS_t8_pb 250 /* 0x0fa */
+#define PLUS_t8_p8 251 /* 0x0fb */
+
+#define CURLY 63 /* 0x3f Match this simple thing
+ {n,m} times. */
+#define CURLY_tb_pb 252 /* 0x0fc */
+#define CURLY_tb_p8 253 /* 0x0fd */
+#define CURLY_t8_pb 254 /* 0x0fe */
+#define CURLY_t8_p8 255 /* 0x0ff */
+
+#define CURLYN 64 /* 0x40 Capture next-after-this
+ simple thing */
+#define CURLYN_tb_pb 256 /* 0x100 */
+#define CURLYN_tb_p8 257 /* 0x101 */
+#define CURLYN_t8_pb 258 /* 0x102 */
+#define CURLYN_t8_p8 259 /* 0x103 */
+
+#define CURLYM 65 /* 0x41 Capture this
+ medium-complex thing {n,m}
+ times. */
+#define CURLYM_tb_pb 260 /* 0x104 */
+#define CURLYM_tb_p8 261 /* 0x105 */
+#define CURLYM_t8_pb 262 /* 0x106 */
+#define CURLYM_t8_p8 263 /* 0x107 */
+
+#define CURLYX 66 /* 0x42 Match this complex thing
+ {n,m} times. */
+#define CURLYX_tb_pb 264 /* 0x108 */
+#define CURLYX_tb_p8 265 /* 0x109 */
+#define CURLYX_t8_pb 266 /* 0x10a */
+#define CURLYX_t8_p8 267 /* 0x10b */
+
+#define WHILEM 67 /* 0x43 Do curly processing and
+ see if rest matches. */
+#define WHILEM_tb_pb 268 /* 0x10c */
+#define WHILEM_tb_p8 269 /* 0x10d */
+#define WHILEM_t8_pb 270 /* 0x10e */
+#define WHILEM_t8_p8 271 /* 0x10f */
+
+#define OPEN 68 /* 0x44 Mark this point in input
+ as start of #n. */
+#define OPEN_tb_pb 272 /* 0x110 */
+#define OPEN_tb_p8 273 /* 0x111 */
+#define OPEN_t8_pb 274 /* 0x112 */
+#define OPEN_t8_p8 275 /* 0x113 */
+
+#define CLOSE 69 /* 0x45 Close corresponding OPEN
+ of #n. */
+#define CLOSE_tb_pb 276 /* 0x114 */
+#define CLOSE_tb_p8 277 /* 0x115 */
+#define CLOSE_t8_pb 278 /* 0x116 */
+#define CLOSE_t8_p8 279 /* 0x117 */
+
+#define SROPEN 70 /* 0x46 Same as OPEN, but for
+ script run */
+#define SROPEN_tb_pb 280 /* 0x118 */
+#define SROPEN_tb_p8 281 /* 0x119 */
+#define SROPEN_t8_pb 282 /* 0x11a */
+#define SROPEN_t8_p8 283 /* 0x11b */
+
+#define SRCLOSE 71 /* 0x47 Close preceding SROPEN */
+#define SRCLOSE_tb_pb 284 /* 0x11c */
+#define SRCLOSE_tb_p8 285 /* 0x11d */
+#define SRCLOSE_t8_pb 286 /* 0x11e */
+#define SRCLOSE_t8_p8 287 /* 0x11f */
+
+#define REF 72 /* 0x48 Match some already matched
+ string */
+#define REF_tb_pb 288 /* 0x120 */
+#define REF_tb_p8 289 /* 0x121 */
+#define REF_t8_pb 290 /* 0x122 */
+#define REF_t8_p8 291 /* 0x123 */
+
+#define REFF 73 /* 0x49 Match already matched
+ string, using /di rules. */
+#define REFF_tb_pb 292 /* 0x124 */
+#define REFF_tb_p8 293 /* 0x125 */
+#define REFF_t8_pb 294 /* 0x126 */
+#define REFF_t8_p8 295 /* 0x127 */
+
+#define REFFL 74 /* 0x4a Match already matched
+ string, using /li rules. */
+#define REFFL_tb_pb 296 /* 0x128 */
+#define REFFL_tb_p8 297 /* 0x129 */
+#define REFFL_t8_pb 298 /* 0x12a */
+#define REFFL_t8_p8 299 /* 0x12b */
+
+#define REFFU 75 /* 0x4b Match already matched
+ string, usng /ui. */
+#define REFFU_tb_pb 300 /* 0x12c */
+#define REFFU_tb_p8 301 /* 0x12d */
+#define REFFU_t8_pb 302 /* 0x12e */
+#define REFFU_t8_p8 303 /* 0x12f */
+
+#define REFFA 76 /* 0x4c Match already matched
+ string, using /aai rules. */
+#define REFFA_tb_pb 304 /* 0x130 */
+#define REFFA_tb_p8 305 /* 0x131 */
+#define REFFA_t8_pb 306 /* 0x132 */
+#define REFFA_t8_p8 307 /* 0x133 */
+
+#define REFN 77 /* 0x4d Match some already matched
+ string */
+#define REFN_tb_pb 308 /* 0x134 */
+#define REFN_tb_p8 309 /* 0x135 */
+#define REFN_t8_pb 310 /* 0x136 */
+#define REFN_t8_p8 311 /* 0x137 */
+
+#define REFFN 78 /* 0x4e Match already matched
+ string, using /di rules. */
+#define REFFN_tb_pb 312 /* 0x138 */
+#define REFFN_tb_p8 313 /* 0x139 */
+#define REFFN_t8_pb 314 /* 0x13a */
+#define REFFN_t8_p8 315 /* 0x13b */
+
+#define REFFLN 79 /* 0x4f Match already matched
+ string, using /li rules. */
+#define REFFLN_tb_pb 316 /* 0x13c */
+#define REFFLN_tb_p8 317 /* 0x13d */
+#define REFFLN_t8_pb 318 /* 0x13e */
+#define REFFLN_t8_p8 319 /* 0x13f */
+
+#define REFFUN 80 /* 0x50 Match already matched
+ string, using /ui rules. */
+#define REFFUN_tb_pb 320 /* 0x140 */
+#define REFFUN_tb_p8 321 /* 0x141 */
+#define REFFUN_t8_pb 322 /* 0x142 */
+#define REFFUN_t8_p8 323 /* 0x143 */
+
+#define REFFAN 81 /* 0x51 Match already matched
+ string, using /aai rules. */
+#define REFFAN_tb_pb 324 /* 0x144 */
+#define REFFAN_tb_p8 325 /* 0x145 */
+#define REFFAN_t8_pb 326 /* 0x146 */
+#define REFFAN_t8_p8 327 /* 0x147 */
+
+#define LONGJMP 82 /* 0x52 Jump far away. */
+#define LONGJMP_tb_pb 328 /* 0x148 */
+#define LONGJMP_tb_p8 329 /* 0x149 */
+#define LONGJMP_t8_pb 330 /* 0x14a */
+#define LONGJMP_t8_p8 331 /* 0x14b */
+
+#define BRANCHJ 83 /* 0x53 BRANCH with long offset.
+ */
+#define BRANCHJ_tb_pb 332 /* 0x14c */
+#define BRANCHJ_tb_p8 333 /* 0x14d */
+#define BRANCHJ_t8_pb 334 /* 0x14e */
+#define BRANCHJ_t8_p8 335 /* 0x14f */
+
+#define IFMATCH 84 /* 0x54 Succeeds if the following
+ matches; non-zero flags "f",
+ next_off "o" means lookbehind
+ assertion starting "f..(f-o)"
+ characters before current */
+#define IFMATCH_tb_pb 336 /* 0x150 */
+#define IFMATCH_tb_p8 337 /* 0x151 */
+#define IFMATCH_t8_pb 338 /* 0x152 */
+#define IFMATCH_t8_p8 339 /* 0x153 */
+
+#define UNLESSM 85 /* 0x55 Fails if the following
+ matches; non-zero flags "f",
+ next_off "o" means lookbehind
+ assertion starting "f..(f-o)"
+ characters before current */
+#define UNLESSM_tb_pb 340 /* 0x154 */
+#define UNLESSM_tb_p8 341 /* 0x155 */
+#define UNLESSM_t8_pb 342 /* 0x156 */
+#define UNLESSM_t8_p8 343 /* 0x157 */
+
+#define SUSPEND 86 /* 0x56 "Independent" sub-RE. */
+#define SUSPEND_tb_pb 344 /* 0x158 */
+#define SUSPEND_tb_p8 345 /* 0x159 */
+#define SUSPEND_t8_pb 346 /* 0x15a */
+#define SUSPEND_t8_p8 347 /* 0x15b */
+
+#define IFTHEN 87 /* 0x57 Switch, should be preceded
+ by switcher. */
+#define IFTHEN_tb_pb 348 /* 0x15c */
+#define IFTHEN_tb_p8 349 /* 0x15d */
+#define IFTHEN_t8_pb 350 /* 0x15e */
+#define IFTHEN_t8_p8 351 /* 0x15f */
+
+#define GROUPP 88 /* 0x58 Whether the group matched.
+ */
+#define GROUPP_tb_pb 352 /* 0x160 */
+#define GROUPP_tb_p8 353 /* 0x161 */
+#define GROUPP_t8_pb 354 /* 0x162 */
+#define GROUPP_t8_p8 355 /* 0x163 */
+
+#define EVAL 89 /* 0x59 Execute some Perl code. */
+#define EVAL_tb_pb 356 /* 0x164 */
+#define EVAL_tb_p8 357 /* 0x165 */
+#define EVAL_t8_pb 358 /* 0x166 */
+#define EVAL_t8_p8 359 /* 0x167 */
+
+#define MINMOD 90 /* 0x5a Next operator is not
+ greedy. */
+#define MINMOD_tb_pb 360 /* 0x168 */
+#define MINMOD_tb_p8 361 /* 0x169 */
+#define MINMOD_t8_pb 362 /* 0x16a */
+#define MINMOD_t8_p8 363 /* 0x16b */
+
+#define LOGICAL 91 /* 0x5b Next opcode should set the
+ flag only. */
+#define LOGICAL_tb_pb 364 /* 0x16c */
+#define LOGICAL_tb_p8 365 /* 0x16d */
+#define LOGICAL_t8_pb 366 /* 0x16e */
+#define LOGICAL_t8_p8 367 /* 0x16f */
+
+#define RENUM 92 /* 0x5c Group with independently
+ numbered parens. */
+#define RENUM_tb_pb 368 /* 0x170 */
+#define RENUM_tb_p8 369 /* 0x171 */
+#define RENUM_t8_pb 370 /* 0x172 */
+#define RENUM_t8_p8 371 /* 0x173 */
+
+#define GOSUB 93 /* 0x5d recurse to paren arg1 at
+ (signed) ofs arg2 */
+#define GOSUB_tb_pb 372 /* 0x174 */
+#define GOSUB_tb_p8 373 /* 0x175 */
+#define GOSUB_t8_pb 374 /* 0x176 */
+#define GOSUB_t8_p8 375 /* 0x177 */
+
+#define GROUPPN 94 /* 0x5e Whether the group matched.
+ */
+#define GROUPPN_tb_pb 376 /* 0x178 */
+#define GROUPPN_tb_p8 377 /* 0x179 */
+#define GROUPPN_t8_pb 378 /* 0x17a */
+#define GROUPPN_t8_p8 379 /* 0x17b */
+
+#define INSUBP 95 /* 0x5f Whether we are in a
+ specific recurse. */
+#define INSUBP_tb_pb 380 /* 0x17c */
+#define INSUBP_tb_p8 381 /* 0x17d */
+#define INSUBP_t8_pb 382 /* 0x17e */
+#define INSUBP_t8_p8 383 /* 0x17f */
+
+#define DEFINEP 96 /* 0x60 Never execute directly. */
+#define DEFINEP_tb_pb 384 /* 0x180 */
+#define DEFINEP_tb_p8 385 /* 0x181 */
+#define DEFINEP_t8_pb 386 /* 0x182 */
+#define DEFINEP_t8_p8 387 /* 0x183 */
+
+#define ENDLIKE 97 /* 0x61 Used only for the type
+ field of verbs */
+#define ENDLIKE_tb_pb 388 /* 0x184 */
+#define ENDLIKE_tb_p8 389 /* 0x185 */
+#define ENDLIKE_t8_pb 390 /* 0x186 */
+#define ENDLIKE_t8_p8 391 /* 0x187 */
+
+#define OPFAIL 98 /* 0x62 Same as (?!), but with
+ verb arg */
+#define OPFAIL_tb_pb 392 /* 0x188 */
+#define OPFAIL_tb_p8 393 /* 0x189 */
+#define OPFAIL_t8_pb 394 /* 0x18a */
+#define OPFAIL_t8_p8 395 /* 0x18b */
+
+#define ACCEPT 99 /* 0x63 Accepts the current
+ matched string, with verbar */
+#define ACCEPT_tb_pb 396 /* 0x18c */
+#define ACCEPT_tb_p8 397 /* 0x18d */
+#define ACCEPT_t8_pb 398 /* 0x18e */
+#define ACCEPT_t8_p8 399 /* 0x18f */
+
+#define VERB 100 /* 0x64 Used only for the type
+ field of verbs */
+#define VERB_tb_pb 400 /* 0x190 */
+#define VERB_tb_p8 401 /* 0x191 */
+#define VERB_t8_pb 402 /* 0x192 */
+#define VERB_t8_p8 403 /* 0x193 */
+
+#define PRUNE 101 /* 0x65 Pattern fails at this
+ startpoint if no-backtracking
+ through this */
+#define PRUNE_tb_pb 404 /* 0x194 */
+#define PRUNE_tb_p8 405 /* 0x195 */
+#define PRUNE_t8_pb 406 /* 0x196 */
+#define PRUNE_t8_p8 407 /* 0x197 */
+
+#define MARKPOINT 102 /* 0x66 Push the current location
+ for rollback by cut. */
+#define MARKPOINT_tb_pb 408 /* 0x198 */
+#define MARKPOINT_tb_p8 409 /* 0x199 */
+#define MARKPOINT_t8_pb 410 /* 0x19a */
+#define MARKPOINT_t8_p8 411 /* 0x19b */
+
+#define SKIP 103 /* 0x67 On failure skip forward
+ (to the mark) before retrying
+ */
+#define SKIP_tb_pb 412 /* 0x19c */
+#define SKIP_tb_p8 413 /* 0x19d */
+#define SKIP_t8_pb 414 /* 0x19e */
+#define SKIP_t8_p8 415 /* 0x19f */
+
+#define COMMIT 104 /* 0x68 Pattern fails outright if
+ backtracking through this */
+#define COMMIT_tb_pb 416 /* 0x1a0 */
+#define COMMIT_tb_p8 417 /* 0x1a1 */
+#define COMMIT_t8_pb 418 /* 0x1a2 */
+#define COMMIT_t8_p8 419 /* 0x1a3 */
+
+#define CUTGROUP 105 /* 0x69 On failure go to the next
+ alternation in the group */
+#define CUTGROUP_tb_pb 420 /* 0x1a4 */
+#define CUTGROUP_tb_p8 421 /* 0x1a5 */
+#define CUTGROUP_t8_pb 422 /* 0x1a6 */
+#define CUTGROUP_t8_p8 423 /* 0x1a7 */
+
+#define KEEPS 106 /* 0x6a $& begins here. */
+#define KEEPS_tb_pb 424 /* 0x1a8 */
+#define KEEPS_tb_p8 425 /* 0x1a9 */
+#define KEEPS_t8_pb 426 /* 0x1aa */
+#define KEEPS_t8_p8 427 /* 0x1ab */
+
+#define OPTIMIZED 107 /* 0x6b Placeholder for dump. */
+#define OPTIMIZED_tb_pb 428 /* 0x1ac */
+#define OPTIMIZED_tb_p8 429 /* 0x1ad */
+#define OPTIMIZED_t8_pb 430 /* 0x1ae */
+#define OPTIMIZED_t8_p8 431 /* 0x1af */
+
+#define PSEUDO 108 /* 0x6c Pseudo opcode for internal
+ use. */
+#define PSEUDO_tb_pb 432 /* 0x1b0 */
+#define PSEUDO_tb_p8 433 /* 0x1b1 */
+#define PSEUDO_t8_pb 434 /* 0x1b2 */
+#define PSEUDO_t8_p8 435 /* 0x1b3 */
+
+#define REGEX_SET 109 /* 0x6d Regex set, temporary node
+ used in pre-optimization
+ compilation */
+#define REGEX_SET_tb_pb 436 /* 0x1b4 */
+#define REGEX_SET_tb_p8 437 /* 0x1b5 */
+#define REGEX_SET_t8_pb 438 /* 0x1b6 */
+#define REGEX_SET_t8_p8 439 /* 0x1b7 */
+
/* ------------ States ------------- */
-#define TRIE_next (REGNODE_MAX + 1) /* state for TRIE */
-#define TRIE_next_fail (REGNODE_MAX + 2) /* state for TRIE */
-#define EVAL_B (REGNODE_MAX + 3) /* state for EVAL */
-#define EVAL_B_fail (REGNODE_MAX + 4) /* state for EVAL */
-#define EVAL_postponed_AB (REGNODE_MAX + 5) /* state for EVAL */
-#define EVAL_postponed_AB_fail (REGNODE_MAX + 6) /* state for EVAL */
-#define CURLYX_end (REGNODE_MAX + 7) /* state for CURLYX */
-#define CURLYX_end_fail (REGNODE_MAX + 8) /* state for CURLYX */
-#define WHILEM_A_pre (REGNODE_MAX + 9) /* state for WHILEM */
-#define WHILEM_A_pre_fail (REGNODE_MAX + 10) /* state for WHILEM */
-#define WHILEM_A_min (REGNODE_MAX + 11) /* state for WHILEM */
-#define WHILEM_A_min_fail (REGNODE_MAX + 12) /* state for WHILEM */
-#define WHILEM_A_max (REGNODE_MAX + 13) /* state for WHILEM */
-#define WHILEM_A_max_fail (REGNODE_MAX + 14) /* state for WHILEM */
-#define WHILEM_B_min (REGNODE_MAX + 15) /* state for WHILEM */
-#define WHILEM_B_min_fail (REGNODE_MAX + 16) /* state for WHILEM */
-#define WHILEM_B_max (REGNODE_MAX + 17) /* state for WHILEM */
-#define WHILEM_B_max_fail (REGNODE_MAX + 18) /* state for WHILEM */
-#define BRANCH_next (REGNODE_MAX + 19) /* state for BRANCH */
-#define BRANCH_next_fail (REGNODE_MAX + 20) /* state for BRANCH */
-#define CURLYM_A (REGNODE_MAX + 21) /* state for CURLYM */
-#define CURLYM_A_fail (REGNODE_MAX + 22) /* state for CURLYM */
-#define CURLYM_B (REGNODE_MAX + 23) /* state for CURLYM */
-#define CURLYM_B_fail (REGNODE_MAX + 24) /* state for CURLYM */
-#define IFMATCH_A (REGNODE_MAX + 25) /* state for IFMATCH */
-#define IFMATCH_A_fail (REGNODE_MAX + 26) /* state for IFMATCH */
-#define CURLY_B_min (REGNODE_MAX + 27) /* state for CURLY */
-#define CURLY_B_min_fail (REGNODE_MAX + 28) /* state for CURLY */
-#define CURLY_B_max (REGNODE_MAX + 29) /* state for CURLY */
-#define CURLY_B_max_fail (REGNODE_MAX + 30) /* state for CURLY */
-#define COMMIT_next (REGNODE_MAX + 31) /* state for COMMIT */
-#define COMMIT_next_fail (REGNODE_MAX + 32) /* state for COMMIT */
-#define MARKPOINT_next (REGNODE_MAX + 33) /* state for MARKPOINT */
-#define MARKPOINT_next_fail (REGNODE_MAX + 34) /* state for MARKPOINT */
-#define SKIP_next (REGNODE_MAX + 35) /* state for SKIP */
-#define SKIP_next_fail (REGNODE_MAX + 36) /* state for SKIP */
-#define CUTGROUP_next (REGNODE_MAX + 37) /* state for CUTGROUP */
-#define CUTGROUP_next_fail (REGNODE_MAX + 38) /* state for CUTGROUP */
-#define KEEPS_next (REGNODE_MAX + 39) /* state for KEEPS */
-#define KEEPS_next_fail (REGNODE_MAX + 40) /* state for KEEPS */
+#define TRIE_next 110 /* 0x6e state for TRIE */
+#define TRIE_next_tb_pb 440 /* 0x1b8 */
+#define TRIE_next_tb_p8 441 /* 0x1b9 */
+#define TRIE_next_t8_pb 442 /* 0x1ba */
+#define TRIE_next_t8_p8 443 /* 0x1bb */
+
+#define TRIE_next_fail 111 /* 0x6f state for TRIE */
+#define TRIE_next_fail_tb_pb 444 /* 0x1bc */
+#define TRIE_next_fail_tb_p8 445 /* 0x1bd */
+#define TRIE_next_fail_t8_pb 446 /* 0x1be */
+#define TRIE_next_fail_t8_p8 447 /* 0x1bf */
+
+#define EVAL_B 112 /* 0x70 state for EVAL */
+#define EVAL_B_tb_pb 448 /* 0x1c0 */
+#define EVAL_B_tb_p8 449 /* 0x1c1 */
+#define EVAL_B_t8_pb 450 /* 0x1c2 */
+#define EVAL_B_t8_p8 451 /* 0x1c3 */
+
+#define EVAL_B_fail 113 /* 0x71 state for EVAL */
+#define EVAL_B_fail_tb_pb 452 /* 0x1c4 */
+#define EVAL_B_fail_tb_p8 453 /* 0x1c5 */
+#define EVAL_B_fail_t8_pb 454 /* 0x1c6 */
+#define EVAL_B_fail_t8_p8 455 /* 0x1c7 */
+
+#define EVAL_postponed_AB 114 /* 0x72 state for EVAL */
+#define EVAL_postponed_AB_tb_pb 456 /* 0x1c8 */
+#define EVAL_postponed_AB_tb_p8 457 /* 0x1c9 */
+#define EVAL_postponed_AB_t8_pb 458 /* 0x1ca */
+#define EVAL_postponed_AB_t8_p8 459 /* 0x1cb */
+
+#define EVAL_postponed_AB_fail 115 /* 0x73 state for EVAL */
+#define EVAL_postponed_AB_fail_tb_pb 460 /* 0x1cc */
+#define EVAL_postponed_AB_fail_tb_p8 461 /* 0x1cd */
+#define EVAL_postponed_AB_fail_t8_pb 462 /* 0x1ce */
+#define EVAL_postponed_AB_fail_t8_p8 463 /* 0x1cf */
+
+#define CURLYX_end 116 /* 0x74 state for CURLYX */
+#define CURLYX_end_tb_pb 464 /* 0x1d0 */
+#define CURLYX_end_tb_p8 465 /* 0x1d1 */
+#define CURLYX_end_t8_pb 466 /* 0x1d2 */
+#define CURLYX_end_t8_p8 467 /* 0x1d3 */
+
+#define CURLYX_end_fail 117 /* 0x75 state for CURLYX */
+#define CURLYX_end_fail_tb_pb 468 /* 0x1d4 */
+#define CURLYX_end_fail_tb_p8 469 /* 0x1d5 */
+#define CURLYX_end_fail_t8_pb 470 /* 0x1d6 */
+#define CURLYX_end_fail_t8_p8 471 /* 0x1d7 */
+
+#define WHILEM_A_pre 118 /* 0x76 state for WHILEM */
+#define WHILEM_A_pre_tb_pb 472 /* 0x1d8 */
+#define WHILEM_A_pre_tb_p8 473 /* 0x1d9 */
+#define WHILEM_A_pre_t8_pb 474 /* 0x1da */
+#define WHILEM_A_pre_t8_p8 475 /* 0x1db */
+
+#define WHILEM_A_pre_fail 119 /* 0x77 state for WHILEM */
+#define WHILEM_A_pre_fail_tb_pb 476 /* 0x1dc */
+#define WHILEM_A_pre_fail_tb_p8 477 /* 0x1dd */
+#define WHILEM_A_pre_fail_t8_pb 478 /* 0x1de */
+#define WHILEM_A_pre_fail_t8_p8 479 /* 0x1df */
+
+#define WHILEM_A_min 120 /* 0x78 state for WHILEM */
+#define WHILEM_A_min_tb_pb 480 /* 0x1e0 */
+#define WHILEM_A_min_tb_p8 481 /* 0x1e1 */
+#define WHILEM_A_min_t8_pb 482 /* 0x1e2 */
+#define WHILEM_A_min_t8_p8 483 /* 0x1e3 */
+
+#define WHILEM_A_min_fail 121 /* 0x79 state for WHILEM */
+#define WHILEM_A_min_fail_tb_pb 484 /* 0x1e4 */
+#define WHILEM_A_min_fail_tb_p8 485 /* 0x1e5 */
+#define WHILEM_A_min_fail_t8_pb 486 /* 0x1e6 */
+#define WHILEM_A_min_fail_t8_p8 487 /* 0x1e7 */
+
+#define WHILEM_A_max 122 /* 0x7a state for WHILEM */
+#define WHILEM_A_max_tb_pb 488 /* 0x1e8 */
+#define WHILEM_A_max_tb_p8 489 /* 0x1e9 */
+#define WHILEM_A_max_t8_pb 490 /* 0x1ea */
+#define WHILEM_A_max_t8_p8 491 /* 0x1eb */
+
+#define WHILEM_A_max_fail 123 /* 0x7b state for WHILEM */
+#define WHILEM_A_max_fail_tb_pb 492 /* 0x1ec */
+#define WHILEM_A_max_fail_tb_p8 493 /* 0x1ed */
+#define WHILEM_A_max_fail_t8_pb 494 /* 0x1ee */
+#define WHILEM_A_max_fail_t8_p8 495 /* 0x1ef */
+
+#define WHILEM_B_min 124 /* 0x7c state for WHILEM */
+#define WHILEM_B_min_tb_pb 496 /* 0x1f0 */
+#define WHILEM_B_min_tb_p8 497 /* 0x1f1 */
+#define WHILEM_B_min_t8_pb 498 /* 0x1f2 */
+#define WHILEM_B_min_t8_p8 499 /* 0x1f3 */
+
+#define WHILEM_B_min_fail 125 /* 0x7d state for WHILEM */
+#define WHILEM_B_min_fail_tb_pb 500 /* 0x1f4 */
+#define WHILEM_B_min_fail_tb_p8 501 /* 0x1f5 */
+#define WHILEM_B_min_fail_t8_pb 502 /* 0x1f6 */
+#define WHILEM_B_min_fail_t8_p8 503 /* 0x1f7 */
+
+#define WHILEM_B_max 126 /* 0x7e state for WHILEM */
+#define WHILEM_B_max_tb_pb 504 /* 0x1f8 */
+#define WHILEM_B_max_tb_p8 505 /* 0x1f9 */
+#define WHILEM_B_max_t8_pb 506 /* 0x1fa */
+#define WHILEM_B_max_t8_p8 507 /* 0x1fb */
+
+#define WHILEM_B_max_fail 127 /* 0x7f state for WHILEM */
+#define WHILEM_B_max_fail_tb_pb 508 /* 0x1fc */
+#define WHILEM_B_max_fail_tb_p8 509 /* 0x1fd */
+#define WHILEM_B_max_fail_t8_pb 510 /* 0x1fe */
+#define WHILEM_B_max_fail_t8_p8 511 /* 0x1ff */
+
+#define BRANCH_next 128 /* 0x80 state for BRANCH */
+#define BRANCH_next_tb_pb 512 /* 0x200 */
+#define BRANCH_next_tb_p8 513 /* 0x201 */
+#define BRANCH_next_t8_pb 514 /* 0x202 */
+#define BRANCH_next_t8_p8 515 /* 0x203 */
+
+#define BRANCH_next_fail 129 /* 0x81 state for BRANCH */
+#define BRANCH_next_fail_tb_pb 516 /* 0x204 */
+#define BRANCH_next_fail_tb_p8 517 /* 0x205 */
+#define BRANCH_next_fail_t8_pb 518 /* 0x206 */
+#define BRANCH_next_fail_t8_p8 519 /* 0x207 */
+
+#define CURLYM_A 130 /* 0x82 state for CURLYM */
+#define CURLYM_A_tb_pb 520 /* 0x208 */
+#define CURLYM_A_tb_p8 521 /* 0x209 */
+#define CURLYM_A_t8_pb 522 /* 0x20a */
+#define CURLYM_A_t8_p8 523 /* 0x20b */
+
+#define CURLYM_A_fail 131 /* 0x83 state for CURLYM */
+#define CURLYM_A_fail_tb_pb 524 /* 0x20c */
+#define CURLYM_A_fail_tb_p8 525 /* 0x20d */
+#define CURLYM_A_fail_t8_pb 526 /* 0x20e */
+#define CURLYM_A_fail_t8_p8 527 /* 0x20f */
+
+#define CURLYM_B 132 /* 0x84 state for CURLYM */
+#define CURLYM_B_tb_pb 528 /* 0x210 */
+#define CURLYM_B_tb_p8 529 /* 0x211 */
+#define CURLYM_B_t8_pb 530 /* 0x212 */
+#define CURLYM_B_t8_p8 531 /* 0x213 */
+
+#define CURLYM_B_fail 133 /* 0x85 state for CURLYM */
+#define CURLYM_B_fail_tb_pb 532 /* 0x214 */
+#define CURLYM_B_fail_tb_p8 533 /* 0x215 */
+#define CURLYM_B_fail_t8_pb 534 /* 0x216 */
+#define CURLYM_B_fail_t8_p8 535 /* 0x217 */
+
+#define IFMATCH_A 134 /* 0x86 state for IFMATCH */
+#define IFMATCH_A_tb_pb 536 /* 0x218 */
+#define IFMATCH_A_tb_p8 537 /* 0x219 */
+#define IFMATCH_A_t8_pb 538 /* 0x21a */
+#define IFMATCH_A_t8_p8 539 /* 0x21b */
+
+#define IFMATCH_A_fail 135 /* 0x87 state for IFMATCH */
+#define IFMATCH_A_fail_tb_pb 540 /* 0x21c */
+#define IFMATCH_A_fail_tb_p8 541 /* 0x21d */
+#define IFMATCH_A_fail_t8_pb 542 /* 0x21e */
+#define IFMATCH_A_fail_t8_p8 543 /* 0x21f */
+
+#define CURLY_B_min 136 /* 0x88 state for CURLY */
+#define CURLY_B_min_tb_pb 544 /* 0x220 */
+#define CURLY_B_min_tb_p8 545 /* 0x221 */
+#define CURLY_B_min_t8_pb 546 /* 0x222 */
+#define CURLY_B_min_t8_p8 547 /* 0x223 */
+
+#define CURLY_B_min_fail 137 /* 0x89 state for CURLY */
+#define CURLY_B_min_fail_tb_pb 548 /* 0x224 */
+#define CURLY_B_min_fail_tb_p8 549 /* 0x225 */
+#define CURLY_B_min_fail_t8_pb 550 /* 0x226 */
+#define CURLY_B_min_fail_t8_p8 551 /* 0x227 */
+
+#define CURLY_B_max 138 /* 0x8a state for CURLY */
+#define CURLY_B_max_tb_pb 552 /* 0x228 */
+#define CURLY_B_max_tb_p8 553 /* 0x229 */
+#define CURLY_B_max_t8_pb 554 /* 0x22a */
+#define CURLY_B_max_t8_p8 555 /* 0x22b */
+
+#define CURLY_B_max_fail 139 /* 0x8b state for CURLY */
+#define CURLY_B_max_fail_tb_pb 556 /* 0x22c */
+#define CURLY_B_max_fail_tb_p8 557 /* 0x22d */
+#define CURLY_B_max_fail_t8_pb 558 /* 0x22e */
+#define CURLY_B_max_fail_t8_p8 559 /* 0x22f */
+
+#define COMMIT_next 140 /* 0x8c state for COMMIT */
+#define COMMIT_next_tb_pb 560 /* 0x230 */
+#define COMMIT_next_tb_p8 561 /* 0x231 */
+#define COMMIT_next_t8_pb 562 /* 0x232 */
+#define COMMIT_next_t8_p8 563 /* 0x233 */
+
+#define COMMIT_next_fail 141 /* 0x8d state for COMMIT */
+#define COMMIT_next_fail_tb_pb 564 /* 0x234 */
+#define COMMIT_next_fail_tb_p8 565 /* 0x235 */
+#define COMMIT_next_fail_t8_pb 566 /* 0x236 */
+#define COMMIT_next_fail_t8_p8 567 /* 0x237 */
+
+#define MARKPOINT_next 142 /* 0x8e state for MARKPOINT */
+#define MARKPOINT_next_tb_pb 568 /* 0x238 */
+#define MARKPOINT_next_tb_p8 569 /* 0x239 */
+#define MARKPOINT_next_t8_pb 570 /* 0x23a */
+#define MARKPOINT_next_t8_p8 571 /* 0x23b */
+
+#define MARKPOINT_next_fail 143 /* 0x8f state for MARKPOINT */
+#define MARKPOINT_next_fail_tb_pb 572 /* 0x23c */
+#define MARKPOINT_next_fail_tb_p8 573 /* 0x23d */
+#define MARKPOINT_next_fail_t8_pb 574 /* 0x23e */
+#define MARKPOINT_next_fail_t8_p8 575 /* 0x23f */
+
+#define SKIP_next 144 /* 0x90 state for SKIP */
+#define SKIP_next_tb_pb 576 /* 0x240 */
+#define SKIP_next_tb_p8 577 /* 0x241 */
+#define SKIP_next_t8_pb 578 /* 0x242 */
+#define SKIP_next_t8_p8 579 /* 0x243 */
+
+#define SKIP_next_fail 145 /* 0x91 state for SKIP */
+#define SKIP_next_fail_tb_pb 580 /* 0x244 */
+#define SKIP_next_fail_tb_p8 581 /* 0x245 */
+#define SKIP_next_fail_t8_pb 582 /* 0x246 */
+#define SKIP_next_fail_t8_p8 583 /* 0x247 */
+
+#define CUTGROUP_next 146 /* 0x92 state for CUTGROUP */
+#define CUTGROUP_next_tb_pb 584 /* 0x248 */
+#define CUTGROUP_next_tb_p8 585 /* 0x249 */
+#define CUTGROUP_next_t8_pb 586 /* 0x24a */
+#define CUTGROUP_next_t8_p8 587 /* 0x24b */
+
+#define CUTGROUP_next_fail 147 /* 0x93 state for CUTGROUP */
+#define CUTGROUP_next_fail_tb_pb 588 /* 0x24c */
+#define CUTGROUP_next_fail_tb_p8 589 /* 0x24d */
+#define CUTGROUP_next_fail_t8_pb 590 /* 0x24e */
+#define CUTGROUP_next_fail_t8_p8 591 /* 0x24f */
+
+#define KEEPS_next 148 /* 0x94 state for KEEPS */
+#define KEEPS_next_tb_pb 592 /* 0x250 */
+#define KEEPS_next_tb_p8 593 /* 0x251 */
+#define KEEPS_next_t8_pb 594 /* 0x252 */
+#define KEEPS_next_t8_p8 595 /* 0x253 */
+
+#define KEEPS_next_fail 149 /* 0x95 state for KEEPS */
+#define KEEPS_next_fail_tb_pb 596 /* 0x254 */
+#define KEEPS_next_fail_tb_p8 597 /* 0x255 */
+#define KEEPS_next_fail_t8_pb 598 /* 0x256 */
+#define KEEPS_next_fail_t8_p8 599 /* 0x257 */
+
/* PL_regkind[] What type of regop or state is this. */
@@ -216,13 +1146,18 @@ EXTCONST U8 PL_regkind[] = {
EXACT, /* EXACTFL */
EXACT, /* EXACTFU */
EXACT, /* EXACTFAA */
+ EXACT, /* EXACTFAA_NO_TRIE */
EXACT, /* EXACTFUP */
EXACT, /* EXACTFLU8 */
- EXACT, /* EXACTFAA_NO_TRIE */
EXACT, /* EXACT_REQ8 */
EXACT, /* LEXACT_REQ8 */
EXACT, /* EXACTFU_REQ8 */
EXACT, /* EXACTFU_S_EDGE */
+ LNBREAK, /* LNBREAK */
+ TRIE, /* TRIE */
+ TRIE, /* TRIEC */
+ TRIE, /* AHOCORASICK */
+ TRIE, /* AHOCORASICKC */
NOTHING, /* NOTHING */
NOTHING, /* TAIL */
STAR, /* STAR */
@@ -257,10 +1192,6 @@ EXTCONST U8 PL_regkind[] = {
MINMOD, /* MINMOD */
LOGICAL, /* LOGICAL */
BRANCHJ, /* RENUM */
- TRIE, /* TRIE */
- TRIE, /* TRIEC */
- TRIE, /* AHOCORASICK */
- TRIE, /* AHOCORASICKC */
GOSUB, /* GOSUB */
GROUPPN, /* GROUPPN */
INSUBP, /* INSUBP */
@@ -275,7 +1206,6 @@ EXTCONST U8 PL_regkind[] = {
VERB, /* COMMIT */
VERB, /* CUTGROUP */
KEEPS, /* KEEPS */
- LNBREAK, /* LNBREAK */
NOTHING, /* OPTIMIZED */
PSEUDO, /* PSEUDO */
REGEX_SET, /* REGEX_SET */
@@ -375,13 +1305,18 @@ static const U8 regarglen[] = {
0, /* EXACTFL */
0, /* EXACTFU */
0, /* EXACTFAA */
+ 0, /* EXACTFAA_NO_TRIE */
0, /* EXACTFUP */
0, /* EXACTFLU8 */
- 0, /* EXACTFAA_NO_TRIE */
0, /* EXACT_REQ8 */
EXTRA_SIZE(struct regnode_1), /* LEXACT_REQ8 */
0, /* EXACTFU_REQ8 */
0, /* EXACTFU_S_EDGE */
+ 0, /* LNBREAK */
+ EXTRA_SIZE(struct regnode_1), /* TRIE */
+ EXTRA_SIZE(struct regnode_charclass), /* TRIEC */
+ EXTRA_SIZE(struct regnode_1), /* AHOCORASICK */
+ EXTRA_SIZE(struct regnode_charclass), /* AHOCORASICKC */
0, /* NOTHING */
0, /* TAIL */
0, /* STAR */
@@ -416,10 +1351,6 @@ static const U8 regarglen[] = {
0, /* MINMOD */
0, /* LOGICAL */
EXTRA_SIZE(struct regnode_1), /* RENUM */
- EXTRA_SIZE(struct regnode_1), /* TRIE */
- EXTRA_SIZE(struct regnode_charclass), /* TRIEC */
- EXTRA_SIZE(struct regnode_1), /* AHOCORASICK */
- EXTRA_SIZE(struct regnode_charclass), /* AHOCORASICKC */
EXTRA_SIZE(struct regnode_2L), /* GOSUB */
EXTRA_SIZE(struct regnode_1), /* GROUPPN */
EXTRA_SIZE(struct regnode_1), /* INSUBP */
@@ -434,7 +1365,6 @@ static const U8 regarglen[] = {
EXTRA_SIZE(struct regnode_1), /* COMMIT */
EXTRA_SIZE(struct regnode_1), /* CUTGROUP */
0, /* KEEPS */
- 0, /* LNBREAK */
0, /* OPTIMIZED */
0, /* PSEUDO */
EXTRA_SIZE(struct regnode_p), /* REGEX_SET */
@@ -490,13 +1420,18 @@ static const char reg_off_by_arg[] = {
0, /* EXACTFL */
0, /* EXACTFU */
0, /* EXACTFAA */
+ 0, /* EXACTFAA_NO_TRIE */
0, /* EXACTFUP */
0, /* EXACTFLU8 */
- 0, /* EXACTFAA_NO_TRIE */
0, /* EXACT_REQ8 */
0, /* LEXACT_REQ8 */
0, /* EXACTFU_REQ8 */
0, /* EXACTFU_S_EDGE */
+ 0, /* LNBREAK */
+ 0, /* TRIE */
+ 0, /* TRIEC */
+ 0, /* AHOCORASICK */
+ 0, /* AHOCORASICKC */
0, /* NOTHING */
0, /* TAIL */
0, /* STAR */
@@ -531,10 +1466,6 @@ static const char reg_off_by_arg[] = {
0, /* MINMOD */
0, /* LOGICAL */
1, /* RENUM */
- 0, /* TRIE */
- 0, /* TRIEC */
- 0, /* AHOCORASICK */
- 0, /* AHOCORASICKC */
0, /* GOSUB */
0, /* GROUPPN */
0, /* INSUBP */
@@ -549,7 +1480,6 @@ static const char reg_off_by_arg[] = {
0, /* COMMIT */
0, /* CUTGROUP */
0, /* KEEPS */
- 0, /* LNBREAK */
0, /* OPTIMIZED */
0, /* PSEUDO */
0, /* REGEX_SET */
@@ -611,66 +1541,66 @@ EXTCONST char * const PL_reg_name[] = {
"EXACTFL", /* 0x2c */
"EXACTFU", /* 0x2d */
"EXACTFAA", /* 0x2e */
- "EXACTFUP", /* 0x2f */
- "EXACTFLU8", /* 0x30 */
- "EXACTFAA_NO_TRIE", /* 0x31 */
+ "EXACTFAA_NO_TRIE", /* 0x2f */
+ "EXACTFUP", /* 0x30 */
+ "EXACTFLU8", /* 0x31 */
"EXACT_REQ8", /* 0x32 */
"LEXACT_REQ8", /* 0x33 */
"EXACTFU_REQ8", /* 0x34 */
"EXACTFU_S_EDGE", /* 0x35 */
- "NOTHING", /* 0x36 */
- "TAIL", /* 0x37 */
- "STAR", /* 0x38 */
- "PLUS", /* 0x39 */
- "CURLY", /* 0x3a */
- "CURLYN", /* 0x3b */
- "CURLYM", /* 0x3c */
- "CURLYX", /* 0x3d */
- "WHILEM", /* 0x3e */
- "OPEN", /* 0x3f */
- "CLOSE", /* 0x40 */
- "SROPEN", /* 0x41 */
- "SRCLOSE", /* 0x42 */
- "REF", /* 0x43 */
- "REFF", /* 0x44 */
- "REFFL", /* 0x45 */
- "REFFU", /* 0x46 */
- "REFFA", /* 0x47 */
- "REFN", /* 0x48 */
- "REFFN", /* 0x49 */
- "REFFLN", /* 0x4a */
- "REFFUN", /* 0x4b */
- "REFFAN", /* 0x4c */
- "LONGJMP", /* 0x4d */
- "BRANCHJ", /* 0x4e */
- "IFMATCH", /* 0x4f */
- "UNLESSM", /* 0x50 */
- "SUSPEND", /* 0x51 */
- "IFTHEN", /* 0x52 */
- "GROUPP", /* 0x53 */
- "EVAL", /* 0x54 */
- "MINMOD", /* 0x55 */
- "LOGICAL", /* 0x56 */
- "RENUM", /* 0x57 */
- "TRIE", /* 0x58 */
- "TRIEC", /* 0x59 */
- "AHOCORASICK", /* 0x5a */
- "AHOCORASICKC", /* 0x5b */
- "GOSUB", /* 0x5c */
- "GROUPPN", /* 0x5d */
- "INSUBP", /* 0x5e */
- "DEFINEP", /* 0x5f */
- "ENDLIKE", /* 0x60 */
- "OPFAIL", /* 0x61 */
- "ACCEPT", /* 0x62 */
- "VERB", /* 0x63 */
- "PRUNE", /* 0x64 */
- "MARKPOINT", /* 0x65 */
- "SKIP", /* 0x66 */
- "COMMIT", /* 0x67 */
- "CUTGROUP", /* 0x68 */
- "KEEPS", /* 0x69 */
- "LNBREAK", /* 0x6a */
+ "LNBREAK", /* 0x36 */
+ "TRIE", /* 0x37 */
+ "TRIEC", /* 0x38 */
+ "AHOCORASICK", /* 0x39 */
+ "AHOCORASICKC", /* 0x3a */
+ "NOTHING", /* 0x3b */
+ "TAIL", /* 0x3c */
+ "STAR", /* 0x3d */
+ "PLUS", /* 0x3e */
+ "CURLY", /* 0x3f */
+ "CURLYN", /* 0x40 */
+ "CURLYM", /* 0x41 */
+ "CURLYX", /* 0x42 */
+ "WHILEM", /* 0x43 */
+ "OPEN", /* 0x44 */
+ "CLOSE", /* 0x45 */
+ "SROPEN", /* 0x46 */
+ "SRCLOSE", /* 0x47 */
+ "REF", /* 0x48 */
+ "REFF", /* 0x49 */
+ "REFFL", /* 0x4a */
+ "REFFU", /* 0x4b */
+ "REFFA", /* 0x4c */
+ "REFN", /* 0x4d */
+ "REFFN", /* 0x4e */
+ "REFFLN", /* 0x4f */
+ "REFFUN", /* 0x50 */
+ "REFFAN", /* 0x51 */
+ "LONGJMP", /* 0x52 */
+ "BRANCHJ", /* 0x53 */
+ "IFMATCH", /* 0x54 */
+ "UNLESSM", /* 0x55 */
+ "SUSPEND", /* 0x56 */
+ "IFTHEN", /* 0x57 */
+ "GROUPP", /* 0x58 */
+ "EVAL", /* 0x59 */
+ "MINMOD", /* 0x5a */
+ "LOGICAL", /* 0x5b */
+ "RENUM", /* 0x5c */
+ "GOSUB", /* 0x5d */
+ "GROUPPN", /* 0x5e */
+ "INSUBP", /* 0x5f */
+ "DEFINEP", /* 0x60 */
+ "ENDLIKE", /* 0x61 */
+ "OPFAIL", /* 0x62 */
+ "ACCEPT", /* 0x63 */
+ "VERB", /* 0x64 */
+ "PRUNE", /* 0x65 */
+ "MARKPOINT", /* 0x66 */
+ "SKIP", /* 0x67 */
+ "COMMIT", /* 0x68 */
+ "CUTGROUP", /* 0x69 */
+ "KEEPS", /* 0x6a */
"OPTIMIZED", /* 0x6b */
"PSEUDO", /* 0x6c */
"REGEX_SET", /* 0x6d */
@@ -808,7 +1738,7 @@ EXTCONST U8 PL_varies[] __attribute__deprecated__ = {
EXTCONST U8 PL_varies_bitmask[];
#else
EXTCONST U8 PL_varies_bitmask[] = {
- 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x7F, 0xF8, 0x5F, 0x06, 0x00, 0x00, 0x00
+ 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xE0, 0x0F, 0xFF, 0xCB, 0x00, 0x00, 0x00
};
#endif /* DOINIT */
@@ -835,4 +1765,20 @@ EXTCONST U8 PL_simple_bitmask[] = {
};
#endif /* DOINIT */
+/* Is 'op', known to be of type EXACT, folding? */
+#define isEXACTFish(op) (__ASSERT_(PL_regkind[op] == EXACT) (PL_EXACTFish_bitmask & (1U << (op - EXACT))))
+
+/* Do only UTF-8 target strings match 'op', known to be of type EXACT? */
+#define isEXACT_REQ8(op) (__ASSERT_(PL_regkind[op] == EXACT) (PL_EXACT_REQ8_bitmask & (1U << (op - EXACT))))
+
+#ifndef DOINIT
+EXTCONST U32 PL_EXACTFish_bitmask;
+EXTCONST U32 PL_EXACT_REQ8_bitmask;
+#else
+EXTCONST U32 PL_EXACTFish_bitmask = 0x33F8;
+EXTCONST U32 PL_EXACT_REQ8_bitmask = 0x1E00;
+#endif /* DOINIT */
+
+#endif /* defined(PERL_CORE) || defined(PERL_EXT_RE_BUILD) */
+
/* ex: set ro: */
diff --git a/Master/tlpkg/tlperl/lib/CORE/sbox32_hash.h b/Master/tlpkg/tlperl/lib/CORE/sbox32_hash.h
index 766102f32a7..2c015a7c6ca 100644
--- a/Master/tlpkg/tlperl/lib/CORE/sbox32_hash.h
+++ b/Master/tlpkg/tlperl/lib/CORE/sbox32_hash.h
@@ -27,7 +27,7 @@
#define SBOX32_WARN2(pat,v0,v1)
#endif
-#ifndef PERL_SEEN_HV_FUNC_H
+#ifndef PERL_SEEN_HV_FUNC_H_
#if !defined(U32)
#include <stdint.h>
#define U32 uint32_t
diff --git a/Master/tlpkg/tlperl/lib/CORE/scope.h b/Master/tlpkg/tlperl/lib/CORE/scope.h
index 483bc5d700c..49177e32a87 100644
--- a/Master/tlpkg/tlperl/lib/CORE/scope.h
+++ b/Master/tlpkg/tlperl/lib/CORE/scope.h
@@ -38,43 +38,45 @@
#define SAVEt_STACK_POS 20
#define SAVEt_READONLY_OFF 21
#define SAVEt_FREEPADNAME 22
+#define SAVEt_STRLEN_SMALL 23
/* two args */
-#define SAVEt_AV 23
-#define SAVEt_DESTRUCTOR 24
-#define SAVEt_DESTRUCTOR_X 25
-#define SAVEt_GENERIC_PVREF 26
-#define SAVEt_GENERIC_SVREF 27
-#define SAVEt_GP 28
-#define SAVEt_GVSV 29
-#define SAVEt_HINTS 30
-#define SAVEt_HPTR 31
-#define SAVEt_HV 32
-#define SAVEt_I32 33
-#define SAVEt_INT 34
-#define SAVEt_ITEM 35
-#define SAVEt_IV 36
-#define SAVEt_LONG 37
-#define SAVEt_PPTR 38
-#define SAVEt_SAVESWITCHSTACK 39
-#define SAVEt_SHARED_PVREF 40
-#define SAVEt_SPTR 41
-#define SAVEt_STRLEN 42
-#define SAVEt_SV 43
-#define SAVEt_SVREF 44
-#define SAVEt_VPTR 45
-#define SAVEt_ADELETE 46
-#define SAVEt_APTR 47
+#define SAVEt_AV 24
+#define SAVEt_DESTRUCTOR 25
+#define SAVEt_DESTRUCTOR_X 26
+#define SAVEt_GENERIC_PVREF 27
+#define SAVEt_GENERIC_SVREF 28
+#define SAVEt_GP 29
+#define SAVEt_GVSV 30
+#define SAVEt_HINTS 31
+#define SAVEt_HPTR 32
+#define SAVEt_HV 33
+#define SAVEt_I32 34
+#define SAVEt_INT 35
+#define SAVEt_ITEM 36
+#define SAVEt_IV 37
+#define SAVEt_LONG 38
+#define SAVEt_PPTR 39
+#define SAVEt_SAVESWITCHSTACK 40
+#define SAVEt_SHARED_PVREF 41
+#define SAVEt_SPTR 42
+#define SAVEt_STRLEN 43
+#define SAVEt_SV 44
+#define SAVEt_SVREF 45
+#define SAVEt_VPTR 46
+#define SAVEt_ADELETE 47
+#define SAVEt_APTR 48
/* three args */
-#define SAVEt_HELEM 48
-#define SAVEt_PADSV_AND_MORTALIZE 49
-#define SAVEt_SET_SVFLAGS 50
-#define SAVEt_GVSLOT 51
-#define SAVEt_AELEM 52
-#define SAVEt_DELETE 53
+#define SAVEt_HELEM 49
+#define SAVEt_PADSV_AND_MORTALIZE 50
+#define SAVEt_SET_SVFLAGS 51
+#define SAVEt_GVSLOT 52
+#define SAVEt_AELEM 53
+#define SAVEt_DELETE 54
+#define SAVEt_HINTS_HH 55
#define SAVEf_SETMAGIC 1
@@ -151,7 +153,7 @@
/*
-=head1 Callback Functions
+=for apidoc_section $callback
=for apidoc Amns||SAVETMPS
Opening bracket for temporaries on a callback. See C<L</FREETMPS>> and
@@ -187,30 +189,30 @@ scope has the given name. C<name> must be a literal string.
#ifdef DEBUGGING
#define ENTER \
STMT_START { \
- push_scope(); \
- DEBUG_SCOPE("ENTER") \
+ push_scope(); \
+ DEBUG_SCOPE("ENTER") \
} STMT_END
#define LEAVE \
STMT_START { \
- DEBUG_SCOPE("LEAVE") \
- pop_scope(); \
+ DEBUG_SCOPE("LEAVE") \
+ pop_scope(); \
} STMT_END
#define ENTER_with_name(name) \
STMT_START { \
- push_scope(); \
- if (PL_scopestack_name) \
- PL_scopestack_name[PL_scopestack_ix-1] = name; \
- DEBUG_SCOPE("ENTER \"" name "\"") \
+ push_scope(); \
+ if (PL_scopestack_name) \
+ PL_scopestack_name[PL_scopestack_ix-1] = name; \
+ DEBUG_SCOPE("ENTER \"" name "\"") \
} STMT_END
#define LEAVE_with_name(name) \
STMT_START { \
- DEBUG_SCOPE("LEAVE \"" name "\"") \
- if (PL_scopestack_name) { \
- assert(((char*)PL_scopestack_name[PL_scopestack_ix-1] \
- == (char*)name) \
- || strEQ(PL_scopestack_name[PL_scopestack_ix-1], name)); \
- } \
- pop_scope(); \
+ DEBUG_SCOPE("LEAVE \"" name "\"") \
+ if (PL_scopestack_name) { \
+ assert(((char*)PL_scopestack_name[PL_scopestack_ix-1] \
+ == (char*)name) \
+ || strEQ(PL_scopestack_name[PL_scopestack_ix-1], name)); \
+ } \
+ pop_scope(); \
} STMT_END
#else
#define ENTER push_scope()
@@ -219,7 +221,7 @@ scope has the given name. C<name> must be a literal string.
#define LEAVE_with_name(name) LEAVE
#endif
#define LEAVE_SCOPE(old) STMT_START { \
- if (PL_savestack_ix > old) leave_scope(old); \
+ if (PL_savestack_ix > old) leave_scope(old); \
} STMT_END
#define SAVEI8(i) save_I8((I8*)&(i))
@@ -245,16 +247,16 @@ scope has the given name. C<name> must be a literal string.
#define SAVESETSVFLAGS(sv,mask,val) save_set_svflags(sv,mask,val)
#define SAVEFREECOPHH(h) save_pushptr((void *)(h), SAVEt_FREECOPHH)
#define SAVEDELETE(h,k,l) \
- save_delete(MUTABLE_HV(h), (char*)(k), (I32)(l))
+ save_delete(MUTABLE_HV(h), (char*)(k), (I32)(l))
#define SAVEHDELETE(h,s) \
- save_hdelete(MUTABLE_HV(h), (s))
+ save_hdelete(MUTABLE_HV(h), (s))
#define SAVEADELETE(a,k) \
- save_adelete(MUTABLE_AV(a), (SSize_t)(k))
+ save_adelete(MUTABLE_AV(a), (SSize_t)(k))
#define SAVEDESTRUCTOR(f,p) \
- save_destructor((DESTRUCTORFUNC_NOCONTEXT_t)(f), (void*)(p))
+ save_destructor((DESTRUCTORFUNC_NOCONTEXT_t)(f), (void*)(p))
#define SAVEDESTRUCTOR_X(f,p) \
- save_destructor_x((DESTRUCTORFUNC_t)(f), (void*)(p))
+ save_destructor_x((DESTRUCTORFUNC_t)(f), (void*)(p))
#define SAVESTACK_POS() \
STMT_START { \
@@ -272,9 +274,9 @@ scope has the given name. C<name> must be a literal string.
#define SAVESWITCHSTACK(f,t) \
STMT_START { \
- save_pushptrptr(MUTABLE_SV(f), MUTABLE_SV(t), SAVEt_SAVESWITCHSTACK); \
- SWITCHSTACK((f),(t)); \
- PL_curstackinfo->si_stack = (t); \
+ save_pushptrptr(MUTABLE_SV(f), MUTABLE_SV(t), SAVEt_SAVESWITCHSTACK); \
+ SWITCHSTACK((f),(t)); \
+ PL_curstackinfo->si_stack = (t); \
} STMT_END
/* Need to do the cop warnings like this, rather than a "SAVEFREESHAREDPV",
diff --git a/Master/tlpkg/tlperl/lib/CORE/stadtx_hash.h b/Master/tlpkg/tlperl/lib/CORE/stadtx_hash.h
deleted file mode 100644
index 5ee879485df..00000000000
--- a/Master/tlpkg/tlperl/lib/CORE/stadtx_hash.h
+++ /dev/null
@@ -1,283 +0,0 @@
-#ifndef STADTX_HASH_H
-#define STADTX_HASH_H
-
-#ifndef DEBUG_STADTX_HASH
-#define DEBUG_STADTX_HASH 0
-#endif
-
-#ifndef PERL_SEEN_HV_FUNC_H
-
-#if !defined(U64)
- #include <stdint.h>
- #define U64 uint64_t
-#endif
-
-#if !defined(U32)
- #define U32 uint32_t
-#endif
-
-#if !defined(U8)
- #define U8 unsigned char
-#endif
-
-#if !defined(U16)
- #define U16 uint16_t
-#endif
-
-#ifndef STRLEN
-#define STRLEN int
-#endif
-
-#endif
-
-#ifndef STADTX_STATIC_INLINE
-#ifdef PERL_STATIC_INLINE
-#define STADTX_STATIC_INLINE PERL_STATIC_INLINE
-#else
-#define STADTX_STATIC_INLINE static inline
-#endif
-#endif
-
-#ifndef STMT_START
-#define STMT_START do
-#define STMT_END while(0)
-#endif
-
-/* Find best way to ROTL32/ROTL64 */
-#if defined(_MSC_VER)
- #include <stdlib.h> /* Microsoft put _rotl declaration in here */
- #define ROTL32(x,r) _rotl(x,r)
- #define ROTR32(x,r) _rotr(x,r)
- #define ROTL64(x,r) _rotl64(x,r)
- #define ROTR64(x,r) _rotr64(x,r)
-#else
- /* gcc recognises this code and generates a rotate instruction for CPUs with one */
- #define ROTL32(x,r) (((U32)(x) << (r)) | ((U32)(x) >> (32 - (r))))
- #define ROTR32(x,r) (((U32)(x) << (32 - (r))) | ((U32)(x) >> (r)))
- #define ROTL64(x,r) ( ( (U64)(x) << (r) ) | ( (U64)(x) >> ( 64 - (r) ) ) )
- #define ROTR64(x,r) ( ( (U64)(x) << ( 64 - (r) ) ) | ( (U64)(x) >> (r) ) )
-#endif
-
-
-/* do a marsaglia xor-shift permutation followed by a
- * multiply by a prime (presumably large) and another
- * marsaglia xor-shift permutation.
- * One of these thoroughly changes the bits of the input.
- * Two of these with different primes passes the Strict Avalanche Criteria
- * in all the tests I did.
- *
- * Note that v cannot end up zero after a scramble64 unless it
- * was zero in the first place.
- */
-#define STADTX_SCRAMBLE64(v,prime) STMT_START { \
- v ^= (v >> 13); \
- v ^= (v << 35); \
- v ^= (v >> 30); \
- v *= prime; \
- v ^= (v >> 19); \
- v ^= (v << 15); \
- v ^= (v >> 46); \
-} STMT_END
-
-
-STADTX_STATIC_INLINE void stadtx_seed_state (
- const U8 *seed_ch,
- U8 *state_ch
-) {
- const U64 *seed= (const U64 *)seed_ch;
- U64 *state= (U64 *)state_ch;
- /* first we apply two masks to each word of the seed, this means that
- * a) at least one of state[0] and state[2] is nonzero,
- * b) at least one of state[1] and state[3] is nonzero
- * c) that state[0] and state[2] are different
- * d) that state[1] and state[3] are different
- * e) that the replacement value for any zero's is a totally different from the seed value.
- * (iow, if seed[0] is 0x43f6a8885a308d31UL then state[0] becomes 0, which is the replaced
- * with 1, which is totally different.). */
- /* hex expansion of pi, skipping first two digits. pi= 3.2[43f6...]*/
- /* pi value in hex from here:
- * http://turner.faculty.swau.edu/mathematics/materialslibrary/pi/pibases.html*/
- state[0]= seed[0] ^ UINT64_C(0x43f6a8885a308d31);
- state[1]= seed[1] ^ UINT64_C(0x3198a2e03707344a);
- state[2]= seed[0] ^ UINT64_C(0x4093822299f31d00);
- state[3]= seed[1] ^ UINT64_C(0x82efa98ec4e6c894);
- if (!state[0]) state[0]=1;
- if (!state[1]) state[1]=2;
- if (!state[2]) state[2]=4;
- if (!state[3]) state[3]=8;
- /* and now for good measure we double scramble all four -
- * a double scramble guarantees a complete avalanche of all the
- * bits in the seed - IOW, by the time we are hashing the
- * four state vectors should be completely different and utterly
- * uncognizable from the input seed bits */
- STADTX_SCRAMBLE64(state[0],UINT64_C(0x801178846e899d17));
- STADTX_SCRAMBLE64(state[0],UINT64_C(0xdd51e5d1c9a5a151));
- STADTX_SCRAMBLE64(state[1],UINT64_C(0x93a7d6c8c62e4835));
- STADTX_SCRAMBLE64(state[1],UINT64_C(0x803340f36895c2b5));
- STADTX_SCRAMBLE64(state[2],UINT64_C(0xbea9344eb7565eeb));
- STADTX_SCRAMBLE64(state[2],UINT64_C(0xcd95d1e509b995cd));
- STADTX_SCRAMBLE64(state[3],UINT64_C(0x9999791977e30c13));
- STADTX_SCRAMBLE64(state[3],UINT64_C(0xaab8b6b05abfc6cd));
-}
-
-#define STADTX_K0_U64 UINT64_C(0xb89b0f8e1655514f)
-#define STADTX_K1_U64 UINT64_C(0x8c6f736011bd5127)
-#define STADTX_K2_U64 UINT64_C(0x8f29bd94edce7b39)
-#define STADTX_K3_U64 UINT64_C(0x9c1b8e1e9628323f)
-
-#define STADTX_K2_U32 0x802910e3
-#define STADTX_K3_U32 0x819b13af
-#define STADTX_K4_U32 0x91cb27e5
-#define STADTX_K5_U32 0xc1a269c1
-
-STADTX_STATIC_INLINE U64 stadtx_hash_with_state(
- const U8 *state_ch,
- const U8 *key,
- const STRLEN key_len
-) {
- U64 *state= (U64 *)state_ch;
- STRLEN len = key_len;
- U64 v0= state[0] ^ ((key_len+1) * STADTX_K0_U64);
- U64 v1= state[1] ^ ((key_len+2) * STADTX_K1_U64);
- if (len < 32) {
- switch(len >> 3) {
- case 3:
- v0 += U8TO64_LE(key) * STADTX_K3_U64;
- v0= ROTR64(v0, 17) ^ v1;
- v1= ROTR64(v1, 53) + v0;
- key += 8;
- /* FALLTHROUGH */
- case 2:
- v0 += U8TO64_LE(key) * STADTX_K3_U64;
- v0= ROTR64(v0, 17) ^ v1;
- v1= ROTR64(v1, 53) + v0;
- key += 8;
- /* FALLTHROUGH */
- case 1:
- v0 += U8TO64_LE(key) * STADTX_K3_U64;
- v0= ROTR64(v0, 17) ^ v1;
- v1= ROTR64(v1, 53) + v0;
- key += 8;
- /* FALLTHROUGH */
- case 0:
- default: break;
- }
- switch ( len & 0x7 ) {
- case 7: v0 += (U64)key[6] << 32;
- /* FALLTHROUGH */
- case 6: v1 += (U64)key[5] << 48;
- /* FALLTHROUGH */
- case 5: v0 += (U64)key[4] << 16;
- /* FALLTHROUGH */
- case 4: v1 += (U64)U8TO32_LE(key);
- break;
- case 3: v0 += (U64)key[2] << 48;
- /* FALLTHROUGH */
- case 2: v1 += (U64)U8TO16_LE(key);
- break;
- case 1: v0 += (U64)key[0];
- /* FALLTHROUGH */
- case 0: v1 = ROTL64(v1, 32) ^ 0xFF;
- break;
- }
- v1 ^= v0;
- v0 = ROTR64(v0,33) + v1;
- v1 = ROTL64(v1,17) ^ v0;
- v0 = ROTL64(v0,43) + v1;
- v1 = ROTL64(v1,31) - v0;
- v0 = ROTL64(v0,13) ^ v1;
- v1 -= v0;
- v0 = ROTL64(v0,41) + v1;
- v1 = ROTL64(v1,37) ^ v0;
- v0 = ROTR64(v0,39) + v1;
- v1 = ROTR64(v1,15) + v0;
- v0 = ROTL64(v0,15) ^ v1;
- v1 = ROTR64(v1, 5);
- return v0 ^ v1;
- } else {
- U64 v2= state[2] ^ ((key_len+3) * STADTX_K2_U64);
- U64 v3= state[3] ^ ((key_len+4) * STADTX_K3_U64);
-
- do {
- v0 += (U64)U8TO64_LE(key+ 0) * STADTX_K2_U32; v0= ROTL64(v0,57) ^ v3;
- v1 += (U64)U8TO64_LE(key+ 8) * STADTX_K3_U32; v1= ROTL64(v1,63) ^ v2;
- v2 += (U64)U8TO64_LE(key+16) * STADTX_K4_U32; v2= ROTR64(v2,47) + v0;
- v3 += (U64)U8TO64_LE(key+24) * STADTX_K5_U32; v3= ROTR64(v3,11) - v1;
- key += 32;
- len -= 32;
- } while ( len >= 32 );
-
- switch ( len >> 3 ) {
- case 3: v0 += ((U64)U8TO64_LE(key) * STADTX_K2_U32); key += 8; v0= ROTL64(v0,57) ^ v3;
- /* FALLTHROUGH */
- case 2: v1 += ((U64)U8TO64_LE(key) * STADTX_K3_U32); key += 8; v1= ROTL64(v1,63) ^ v2;
- /* FALLTHROUGH */
- case 1: v2 += ((U64)U8TO64_LE(key) * STADTX_K4_U32); key += 8; v2= ROTR64(v2,47) + v0;
- /* FALLTHROUGH */
- case 0: v3 = ROTR64(v3,11) - v1;
- /* FALLTHROUGH */
- }
- v0 ^= (len+1) * STADTX_K3_U64;
- switch ( len & 0x7 ) {
- case 7: v1 += (U64)key[6];
- /* FALLTHROUGH */
- case 6: v2 += (U64)U8TO16_LE(key+4);
- v3 += (U64)U8TO32_LE(key);
- break;
- case 5: v1 += (U64)key[4];
- /* FALLTHROUGH */
- case 4: v2 += (U64)U8TO32_LE(key);
- break;
- case 3: v3 += (U64)key[2];
- /* FALLTHROUGH */
- case 2: v1 += (U64)U8TO16_LE(key);
- break;
- case 1: v2 += (U64)key[0];
- /* FALLTHROUGH */
- case 0: v3 = ROTL64(v3, 32) ^ 0xFF;
- break;
- }
-
- v1 -= v2;
- v0 = ROTR64(v0,19);
- v1 -= v0;
- v1 = ROTR64(v1,53);
- v3 ^= v1;
- v0 -= v3;
- v3 = ROTL64(v3,43);
- v0 += v3;
- v0 = ROTR64(v0, 3);
- v3 -= v0;
- v2 = ROTR64(v2,43) - v3;
- v2 = ROTL64(v2,55) ^ v0;
- v1 -= v2;
- v3 = ROTR64(v3, 7) - v2;
- v2 = ROTR64(v2,31);
- v3 += v2;
- v2 -= v1;
- v3 = ROTR64(v3,39);
- v2 ^= v3;
- v3 = ROTR64(v3,17) ^ v2;
- v1 += v3;
- v1 = ROTR64(v1, 9);
- v2 ^= v1;
- v2 = ROTL64(v2,24);
- v3 ^= v2;
- v3 = ROTR64(v3,59);
- v0 = ROTR64(v0, 1) - v1;
-
- return v0 ^ v1 ^ v2 ^ v3;
- }
-}
-
-STADTX_STATIC_INLINE U64 stadtx_hash(
- const U8 *seed_ch,
- const U8 *key,
- const STRLEN key_len
-) {
- U64 state[4];
- stadtx_seed_state(seed_ch,(U8*)state);
- return stadtx_hash_with_state((U8*)state,key,key_len);
-}
-
-#endif
diff --git a/Master/tlpkg/tlperl/lib/CORE/sv.h b/Master/tlpkg/tlperl/lib/CORE/sv.h
index 8c1356682ec..240986ca33c 100644
--- a/Master/tlpkg/tlperl/lib/CORE/sv.h
+++ b/Master/tlpkg/tlperl/lib/CORE/sv.h
@@ -13,9 +13,9 @@
#endif
/*
-=head1 SV Flags
+=for apidoc_section $SV_flags
-=for apidoc AmnU||svtype
+=for apidoc Ay||svtype
An enum of flags for Perl types. These are found in the file F<sv.h>
in the C<svtype> enum. Test these flags with the C<SvTYPE> macro.
@@ -265,63 +265,66 @@ struct p5rx {
_SV_HEAD_UNION;
};
+struct invlist {
+ _SV_HEAD(XINVLIST*); /* pointer to xpvinvlist body */
+ _SV_HEAD_UNION;
+};
+
#undef _SV_HEAD
#undef _SV_HEAD_UNION /* ensure no pollution */
/*
-=head1 SV Manipulation Functions
+=for apidoc_section $SV
=for apidoc Am|U32|SvREFCNT|SV* sv
Returns the value of the object's reference count. Exposed
to perl code via Internals::SvREFCNT().
=for apidoc SvREFCNT_inc
-Increments the reference count of the given SV, returning the SV.
+=for apidoc_item SvREFCNT_inc_NN
+=for apidoc_item SvREFCNT_inc_void
+=for apidoc_item |void|SvREFCNT_inc_void_NN|SV* sv
+=for apidoc_item |SV*|SvREFCNT_inc_simple|SV* sv
+=for apidoc_item |SV*|SvREFCNT_inc_simple_NN|SV* sv
+=for apidoc_item |void|SvREFCNT_inc_simple_void|SV* sv
+=for apidoc_item |void|SvREFCNT_inc_simple_void_NN|SV* sv
-All of the following C<SvREFCNT_inc>* are optimized versions of
-C<SvREFCNT_inc>, and can be replaced with C<SvREFCNT_inc>.
+These all increment the reference count of the given SV.
+The ones without C<void> in their names return the SV.
-=for apidoc SvREFCNT_inc_NN
-Same as C<SvREFCNT_inc>, but can only be used if you know C<sv>
-is not C<NULL>. Since we don't have to check the NULLness, it's faster
-and smaller.
+C<SvREFCNT_inc> is the base operation; the rest are optimizations if various
+input constraints are known to be true; hence, all can be replaced with
+C<SvREFCNT_inc>.
-=for apidoc SvREFCNT_inc_void
-Same as C<SvREFCNT_inc>, but can only be used if you don't need the
+C<SvREFCNT_inc_NN> can only be used if you know C<sv> is not C<NULL>. Since we
+don't have to check the NULLness, it's faster and smaller.
+
+C<SvREFCNT_inc_void> can only be used if you don't need the
return value. The macro doesn't need to return a meaningful value.
-=for apidoc Am|void|SvREFCNT_inc_void_NN|SV* sv
-Same as C<SvREFCNT_inc>, but can only be used if you don't need the return
-value, and you know that C<sv> is not C<NULL>. The macro doesn't need
-to return a meaningful value, or check for NULLness, so it's smaller
-and faster.
+C<SvREFCNT_inc_void_NN> can only be used if you both don't need the return
+value, and you know that C<sv> is not C<NULL>. The macro doesn't need to
+return a meaningful value, or check for NULLness, so it's smaller and faster.
-=for apidoc Am|SV*|SvREFCNT_inc_simple|SV* sv
-Same as C<SvREFCNT_inc>, but can only be used with expressions without side
+C<SvREFCNT_inc_simple> can only be used with expressions without side
effects. Since we don't have to store a temporary value, it's faster.
-=for apidoc Am|SV*|SvREFCNT_inc_simple_NN|SV* sv
-Same as C<SvREFCNT_inc_simple>, but can only be used if you know C<sv>
-is not C<NULL>. Since we don't have to check the NULLness, it's faster
-and smaller.
+C<SvREFCNT_inc_simple_NN> can only be used with expressions without side
+effects and you know C<sv> is not C<NULL>. Since we don't have to store a
+temporary value, nor check for NULLness, it's faster and smaller.
-=for apidoc Am|void|SvREFCNT_inc_simple_void|SV* sv
-Same as C<SvREFCNT_inc_simple>, but can only be used if you don't need the
-return value. The macro doesn't need to return a meaningful value.
+C<SvREFCNT_inc_simple_void> can only be used with expressions without side
+effects and you don't need the return value.
-=for apidoc Am|void|SvREFCNT_inc_simple_void_NN|SV* sv
-Same as C<SvREFCNT_inc>, but can only be used if you don't need the return
-value, and you know that C<sv> is not C<NULL>. The macro doesn't need
-to return a meaningful value, or check for NULLness, so it's smaller
-and faster.
+C<SvREFCNT_inc_simple_void_NN> can only be used with expressions without side
+effects, you don't need the return value, and you know C<sv> is not C<NULL>.
=for apidoc SvREFCNT_dec
-Decrements the reference count of the given SV. C<sv> may be C<NULL>.
+=for apidoc_item SvREFCNT_dec_NN
+
+These decrement the reference count of the given SV.
-=for apidoc SvREFCNT_dec_NN
-Same as C<SvREFCNT_dec>, but can only be used if you know C<sv>
-is not C<NULL>. Since we don't have to check the NULLness, it's faster
-and smaller.
+C<SvREFCNT_dec_NN> may only be used when C<sv> is known to not be C<NULL>.
=for apidoc Am|svtype|SvTYPE|SV* sv
Returns the type of the SV. See C<L</svtype>>.
@@ -744,7 +747,7 @@ Returns a boolean indicating whether the SV contains a v-string.
=for apidoc Am|U32|SvOOK|SV* sv
Returns a U32 indicating whether the pointer to the string buffer is offset.
This hack is used internally to speed up removal of characters from the
-beginning of a C<SvPV>. When C<SvOOK> is true, then the start of the
+beginning of a C<L</SvPV>>. When C<SvOOK> is true, then the start of the
allocated string buffer is actually C<SvOOK_offset()> bytes before C<SvPVX>.
This offset used to be stored in C<SvIVX>, but is now stored within the spare
part of the buffer.
@@ -777,16 +780,30 @@ Returns the raw value in the SV's NV slot, without checks or conversions.
Only use when you are sure C<SvNOK> is true. See also C<L</SvNV>>.
=for apidoc Am|char*|SvPVX|SV* sv
-Returns a pointer to the physical string in the SV. The SV must contain a
-string. Prior to 5.9.3 it is not safe
-to execute this macro unless the SV's
+=for apidoc_item |char*|SvPVXx|SV* sv
+=for apidoc_item |const char*|SvPVX_const|SV* sv
+=for apidoc_item |char*|SvPVX_mutable|SV* sv
+
+These return a pointer to the physical string in the SV. The SV must contain a
+string. Prior to 5.9.3 it is not safe to execute these unless the SV's
type >= C<SVt_PV>.
-This is also used to store the name of an autoloaded subroutine in an XS
+These are also used to store the name of an autoloaded subroutine in an XS
AUTOLOAD routine. See L<perlguts/Autoloading with XSUBs>.
+C<SvPVXx> is identical to C<SvPVX>.
+
+C<SvPVX_mutable> is merely a synonym for C<SvPVX>, but its name emphasizes that
+the string is modifiable by the caller.
+
+C<SvPVX_const> differs in that the return value has been cast so that the
+compiler will complain if you were to try to modify the contents of the string,
+(unless you cast away const yourself).
+
=for apidoc Am|STRLEN|SvCUR|SV* sv
-Returns the length of the string which is in the SV. See C<L</SvLEN>>.
+Returns the length, in bytes, of the PV inside the SV.
+Note that this may not match Perl's C<length>; for that, use
+C<sv_len_utf8(sv)>. See C<L</SvLEN>> also.
=for apidoc Am|STRLEN|SvLEN|SV* sv
Returns the size of the string buffer in the SV, not including any part
@@ -824,8 +841,8 @@ Remember to free the previous PV buffer. There are many things to check.
Beware that the existing pointer may be involved in copy-on-write or other
mischief, so do C<SvOOK_off(sv)> and use C<sv_force_normal> or
C<SvPV_force> (or check the C<SvIsCOW> flag) first to make sure this
-modification is safe. Then finally, if it is not a COW, call C<SvPV_free> to
-free the previous PV buffer.
+modification is safe. Then finally, if it is not a COW, call
+C<L</SvPV_free>> to free the previous PV buffer.
=for apidoc Am|void|SvUV_set|SV* sv|UV val
Set the value of the UV pointer in C<sv> to val. See C<L</SvIV_set>>.
@@ -840,8 +857,8 @@ Set the value of the MAGIC pointer in C<sv> to val. See C<L</SvIV_set>>.
Set the value of the STASH pointer in C<sv> to val. See C<L</SvIV_set>>.
=for apidoc Am|void|SvCUR_set|SV* sv|STRLEN len
-Set the current length of the string which is in the SV. See C<L</SvCUR>>
-and C<SvIV_set>>.
+Sets the current length, in bytes, of the C string which is in the SV.
+See C<L</SvCUR>> and C<SvIV_set>>.
=for apidoc Am|void|SvLEN_set|SV* sv|STRLEN len
Set the size of the string buffer for the SV. See C<L</SvLEN>>.
@@ -907,7 +924,7 @@ Set the size of the string buffer for the SV. See C<L</SvLEN>>.
=for apidoc Am|U32|SvUTF8|SV* sv
Returns a U32 value indicating the UTF-8 status of an SV. If things are set-up
properly, this indicates whether or not the SV contains UTF-8 encoded data.
-You should use this I<after> a call to C<SvPV()> or one of its variants, in
+You should use this I<after> a call to C<L</SvPV>> or one of its variants, in
case any call to string overloading updates the internal flag.
If you want to take into account the L<bytes> pragma, use C<L</DO_UTF8>>
@@ -949,12 +966,28 @@ in gv.h: */
#define SvVOK(sv) (SvMAGICAL(sv) \
&& mg_find(sv,PERL_MAGIC_vstring))
-/* returns the vstring magic, if any */
+/*
+=for apidoc Am|MAGIC*|SvVSTRING_mg|SV * sv
+
+Returns the vstring magic, or NULL if none
+
+=cut
+*/
#define SvVSTRING_mg(sv) (SvMAGICAL(sv) \
? mg_find(sv,PERL_MAGIC_vstring) : NULL)
#define SvOOK(sv) (SvFLAGS(sv) & SVf_OOK)
#define SvOOK_on(sv) (SvFLAGS(sv) |= SVf_OOK)
+
+
+/*
+=for apidoc Am|void|SvOOK_off|SV * sv
+
+Remove any string offset.
+
+=cut
+*/
+
#define SvOOK_off(sv) ((void)(SvOOK(sv) && (sv_backoff(sv),0)))
#define SvFAKE(sv) (SvFLAGS(sv) & SVf_FAKE)
@@ -1131,7 +1164,7 @@ object type. Exposed to perl code via Internals::SvREADONLY().
#endif
-#if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+#if defined (DEBUGGING) && defined(PERL_USE_GCC_BRACE_GROUPS)
# define SvTAIL(sv) ({ const SV *const _svtail = (const SV *)(sv); \
assert(SvTYPE(_svtail) != SVt_PVAV); \
assert(SvTYPE(_svtail) != SVt_PVHV); \
@@ -1175,7 +1208,7 @@ object type. Exposed to perl code via Internals::SvREADONLY().
# define SvMAGIC(sv) (0 + *(assert_(SvTYPE(sv) >= SVt_PVMG) &((XPVMG*) SvANY(sv))->xmg_u.xmg_magic))
# define SvSTASH(sv) (0 + *(assert_(SvTYPE(sv) >= SVt_PVMG) &((XPVMG*) SvANY(sv))->xmg_stash))
-#else
+#else /* Below is not PERL_DEBUG_COW */
# ifdef PERL_CORE
# define SvLEN(sv) (0 + ((XPV*) SvANY(sv))->xpv_len)
# else
@@ -1183,7 +1216,7 @@ object type. Exposed to perl code via Internals::SvREADONLY().
# endif
# define SvEND(sv) ((sv)->sv_u.svu_pv + ((XPV*)SvANY(sv))->xpv_cur)
-# if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+# if defined (DEBUGGING) && defined(PERL_USE_GCC_BRACE_GROUPS)
/* These get expanded inside other macros that already use a variable _sv */
# define SvPVX(sv) \
(*({ SV *const _svpvx = MUTABLE_SV(sv); \
@@ -1256,7 +1289,7 @@ object type. Exposed to perl code via Internals::SvREADONLY().
assert(SvTYPE(_svstash) >= SVt_PVMG); \
&(((XPVMG*) MUTABLE_PTR(SvANY(_svstash)))->xmg_stash); \
}))
-# else
+# else /* Below is not DEBUGGING or can't use brace groups */
# define SvPVX(sv) ((sv)->sv_u.svu_pv)
# define SvCUR(sv) ((XPV*) SvANY(sv))->xpv_cur
# define SvIVX(sv) ((XPVIV*) SvANY(sv))->xiv_iv
@@ -1271,7 +1304,7 @@ object type. Exposed to perl code via Internals::SvREADONLY().
#ifndef PERL_POISON
/* Given that these two are new, there can't be any existing code using them
- * as LVALUEs */
+ * as LVALUEs, so prevent that from happening */
# define SvPVX_mutable(sv) (0 + (sv)->sv_u.svu_pv)
# define SvPVX_const(sv) ((const char*)(0 + (sv)->sv_u.svu_pv))
#else
@@ -1352,6 +1385,17 @@ object type. Exposed to perl code via Internals::SvREADONLY().
STMT_START { assert(SvTYPE(sv) >= SVt_PV); \
SvCUR_set(sv, (val) - SvPVX(sv)); } STMT_END
+/*
+=for apidoc Am|void|SvPV_renew|SV* sv|STRLEN len
+Low level micro optimization of C<L</SvGROW>>. It is generally better to use
+C<SvGROW> instead. This is because C<SvPV_renew> ignores potential issues that
+C<SvGROW> handles. C<sv> needs to have a real C<PV> that is unencombered by
+things like COW. Using C<SV_CHECK_THINKFIRST> or
+C<SV_CHECK_THINKFIRST_COW_DROP> before calling this should clean it up, but
+why not just use C<SvGROW> if you're not sure about the provenance?
+
+=cut
+*/
#define SvPV_renew(sv,n) \
STMT_START { SvLEN_set(sv, n); \
SvPV_set((sv), (MEM_WRAP_CHECK_(n,char) \
@@ -1364,6 +1408,14 @@ object type. Exposed to perl code via Internals::SvREADONLY().
SvPV_renew(sv, _lEnGtH); \
} STMT_END
+/*
+=for apidoc Am|void|SvPV_free|SV * sv
+
+Frees the PV buffer in C<sv>, leaving things in a precarious state, so should
+only be used as part of a larger operation
+
+=cut
+*/
#define SvPV_free(sv) \
STMT_START { \
assert(SvTYPE(sv) >= SVt_PV); \
@@ -1398,7 +1450,7 @@ object type. Exposed to perl code via Internals::SvREADONLY().
# define BmFLAGS(sv) (SvTAIL(sv) ? FBMcf_TAIL : 0)
#endif
-#if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+#if defined (DEBUGGING) && defined(PERL_USE_GCC_BRACE_GROUPS)
# define BmUSEFUL(sv) \
(*({ SV *const _bmuseful = MUTABLE_SV(sv); \
assert(SvTYPE(_bmuseful) >= SVt_PVIV); \
@@ -1503,9 +1555,23 @@ attention to precisely which outputs are influenced by which inputs.
/*
=for apidoc Am|char*|SvPV_force|SV* sv|STRLEN len
-Like C<SvPV> but will force the SV into containing a string (C<SvPOK>), and
-only a string (C<SvPOK_only>), by hook or by crook. You need force if you are
-going to update the C<SvPVX> directly. Processes get magic.
+=for apidoc_item ||SvPV_force_nolen|SV* sv
+=for apidoc_item ||SvPVx_force|SV* sv|STRLEN len
+=for apidoc_item ||SvPV_force_nomg|SV* sv|STRLEN len
+=for apidoc_item ||SvPV_force_nomg_nolen|SV * sv
+=for apidoc_item ||SvPV_force_mutable|SV * sv|STRLEN len
+=for apidoc_item ||SvPV_force_flags|SV * sv|STRLEN len|U32 flags
+=for apidoc_item ||SvPV_force_flags_nolen|SV * sv|U32 flags
+=for apidoc_item ||SvPV_force_flags_mutable|SV * sv|STRLEN len|U32 flags
+=for apidoc_item ||SvPVbyte_force
+=for apidoc_item ||SvPVbytex_force
+=for apidoc_item ||SvPVutf8_force
+=for apidoc_item ||SvPVutf8x_force
+
+These are like C<L</SvPV>>, returning the string in the SV, but will force the
+SV into containing a string (C<L</SvPOK>>), and only a string
+(C<L</SvPOK_only>>), by hook or by crook. You need to use one of these
+C<force> routines if you are going to update the C<L</SvPVX>> directly.
Note that coercing an arbitrary scalar into a plain PV will potentially
strip useful data from it. For example if the SV was C<SvROK>, then the
@@ -1513,114 +1579,204 @@ referent will have its reference count decremented, and the SV itself may
be converted to an C<SvPOK> scalar with a string buffer containing a value
such as C<"ARRAY(0x1234)">.
-=for apidoc Am|char*|SvPV_force_nomg|SV* sv|STRLEN len
-Like C<SvPV_force>, but doesn't process get magic.
+The differences between the forms are:
-=for apidoc Am|char*|SvPV|SV* sv|STRLEN len
-Returns a pointer to the string in the SV, or a stringified form of
-the SV if the SV does not contain a string. The SV may cache the
-stringified version becoming C<SvPOK>. Handles 'get' magic. The
-C<len> variable will be set to the length of the string (this is a macro, so
-don't use C<&len>). See also C<L</SvPVx>> for a version which guarantees to
-evaluate C<sv> only once.
-
-Note that there is no guarantee that the return value of C<SvPV()> is
-equal to C<SvPVX(sv)>, or that C<SvPVX(sv)> contains valid data, or that
-successive calls to C<SvPV(sv)> will return the same pointer value each
-time. This is due to the way that things like overloading and
-Copy-On-Write are handled. In these cases, the return value may point to
-a temporary buffer or similar. If you absolutely need the C<SvPVX> field to
-be valid (for example, if you intend to write to it), then see
-C<L</SvPV_force>>.
-
-=for apidoc Am|char*|SvPVx|SV* sv|STRLEN len
-A version of C<SvPV> which guarantees to evaluate C<sv> only once.
-Only use this if C<sv> is an expression with side effects, otherwise use the
-more efficient C<SvPV>.
-
-=for apidoc Am|char*|SvPV_nomg|SV* sv|STRLEN len
-Like C<SvPV> but doesn't process magic.
-
-=for apidoc Am|char*|SvPV_nolen|SV* sv
-Like C<SvPV> but doesn't set a length variable.
-
-=for apidoc Am|char*|SvPV_nomg_nolen|SV* sv
-Like C<SvPV_nolen> but doesn't process magic.
+The forms with C<flags> in their names allow you to use the C<flags> parameter
+to specify to perform 'get' magic (by setting the C<SV_GMAGIC> flag) or to skip
+'get' magic (by clearing it). The other forms do perform 'get' magic, except
+for the ones with C<nomg> in their names, which skip 'get' magic.
-=for apidoc Am|IV|SvIV|SV* sv
-Coerces the given SV to IV and returns it. The returned value in many
-circumstances will get stored in C<sv>'s IV slot, but not in all cases. (Use
-C<L</sv_setiv>> to make sure it does).
+The forms that take a C<len> parameter will set that variable to the byte
+length of the resultant string (these are macros, so don't use C<&len>).
+
+The forms with C<nolen> in their names indicate they don't have a C<len>
+parameter. They should be used only when it is known that the PV is a C
+string, terminated by a NUL byte, and without intermediate NUL characters; or
+when you don't care about its length.
+
+The forms with C<mutable> in their names are effectively the same as those without,
+but the name emphasizes that the string is modifiable by the caller, which it is
+in all the forms.
+
+C<SvPVutf8_force> is like C<SvPV_force>, but converts C<sv> to UTF-8 first if
+not already UTF-8.
+
+C<SvPVutf8x_force> is like C<SvPVutf8_force>, but guarantees to evaluate C<sv>
+only once; use the more efficient C<SvPVutf8_force> otherwise.
+
+C<SvPVbyte_force> is like C<SvPV_force>, but converts C<sv> to byte
+representation first if currently encoded as UTF-8. If the SV cannot be
+downgraded from UTF-8, this croaks.
-See C<L</SvIVx>> for a version which guarantees to evaluate C<sv> only once.
+C<SvPVbytex_force> is like C<SvPVbyte_force>, but guarantees to evaluate C<sv>
+only once; use the more efficient C<SvPVbyte_force> otherwise.
-=for apidoc Am|IV|SvIV_nomg|SV* sv
-Like C<SvIV> but doesn't process magic.
+=for apidoc Am|char*|SvPV|SV* sv|STRLEN len
+=for apidoc_item |char*|SvPVx|SV* sv|STRLEN len
+=for apidoc_item |char*|SvPV_nomg|SV* sv|STRLEN len
+=for apidoc_item |char*|SvPV_nolen|SV* sv
+=for apidoc_item |char*|SvPVx_nolen|SV* sv
+=for apidoc_item |char*|SvPV_nomg_nolen|SV* sv
+=for apidoc_item |char*|SvPV_mutable|SV* sv|STRLEN len
+=for apidoc_item |const char*|SvPV_const|SV* sv|STRLEN len
+=for apidoc_item |const char*|SvPVx_const|SV* sv|STRLEN len
+=for apidoc_item |const char*|SvPV_nolen_const|SV* sv
+=for apidoc_item |const char*|SvPVx_nolen_const|SV* sv
+=for apidoc_item |const char*|SvPV_nomg_const|SV* sv|STRLEN len
+=for apidoc_item |const char*|SvPV_nomg_const_nolen|SV* sv
+=for apidoc_item |char *|SvPV_flags|SV * sv|STRLEN len|U32 flags
+=for apidoc_item |const char *|SvPV_flags_const|SV * sv|STRLEN len|U32 flags
+=for apidoc_item |char *|SvPV_flags_mutable|SV * sv|STRLEN len|U32 flags
+=for apidoc_item |char*|SvPVbyte|SV* sv|STRLEN len
+=for apidoc_item |char*|SvPVbyte_nomg|SV* sv|STRLEN len
+=for apidoc_item |char*|SvPVbyte_nolen|SV* sv
+=for apidoc_item |char*|SvPVbytex_nolen|SV* sv
+=for apidoc_item |char*|SvPVbytex|SV* sv|STRLEN len
+=for apidoc_item |char*|SvPVbyte_or_null|SV* sv|STRLEN len
+=for apidoc_item |char*|SvPVbyte_or_null_nomg|SV* sv|STRLEN len
+=for apidoc_item |char*|SvPVutf8|SV* sv|STRLEN len
+=for apidoc_item |char*|SvPVutf8x|SV* sv|STRLEN len
+=for apidoc_item |char*|SvPVutf8_nomg|SV* sv|STRLEN len
+=for apidoc_item |char*|SvPVutf8_nolen|SV* sv
+=for apidoc_item |char*|SvPVutf8_or_null|SV* sv|STRLEN len
+=for apidoc_item |char*|SvPVutf8_or_null_nomg|SV* sv|STRLEN len
+
+All these return a pointer to the string in C<sv>, or a stringified form of
+C<sv> if it does not contain a string. The SV may cache the stringified
+version becoming C<SvPOK>.
+
+This is a very basic and common operation, so there are lots of slightly
+different versions of it.
+
+Note that there is no guarantee that the return value of C<SvPV(sv)>, for
+example, is equal to C<SvPVX(sv)>, or that C<SvPVX(sv)> contains valid data, or
+that successive calls to C<SvPV(sv)> (or another of these forms) will return
+the same pointer value each time. This is due to the way that things like
+overloading and Copy-On-Write are handled. In these cases, the return value
+may point to a temporary buffer or similar. If you absolutely need the
+C<SvPVX> field to be valid (for example, if you intend to write to it), then
+see C<L</SvPV_force>>.
+
+The differences between the forms are:
+
+The forms with neither C<byte> nor C<utf8> in their names (e.g., C<SvPV> or
+C<SvPV_nolen>) can expose the SV's internal string buffer. If
+that buffer consists entirely of bytes 0-255 and includes any bytes above
+127, then you B<MUST> consult C<SvUTF8> to determine the actual code points
+the string is meant to contain. Generally speaking, it is probably safer to
+prefer C<SvPVbyte>, C<SvPVutf8>, and the like. See
+L<perlguts/How do I pass a Perl string to a C library?> for more details.
+
+The forms with C<flags> in their names allow you to use the C<flags> parameter
+to specify to process 'get' magic (by setting the C<SV_GMAGIC> flag) or to skip
+'get' magic (by clearing it). The other forms process 'get' magic, except for
+the ones with C<nomg> in their names, which skip 'get' magic.
+
+The forms that take a C<len> parameter will set that variable to the byte
+length of the resultant string (these are macros, so don't use C<&len>).
+
+The forms with C<nolen> in their names indicate they don't have a C<len>
+parameter. They should be used only when it is known that the PV is a C
+string, terminated by a NUL byte, and without intermediate NUL characters; or
+when you don't care about its length.
+
+The forms with C<const> in their names return S<C<const char *>> so that the
+compiler will hopefully complain if you were to try to modify the contents of
+the string (unless you cast away const yourself).
+
+The other forms return a mutable pointer so that the string is modifiable by
+the caller; this is emphasized for the ones with C<mutable> in their names.
+
+The forms whose name ends in C<x> are the same as the corresponding form
+without the C<x>, but the C<x> form is guaranteed to evaluate C<sv> exactly
+once, with a slight loss of efficiency. Use this if C<sv> is an expression
+with side effects.
+
+C<SvPVutf8> is like C<SvPV>, but converts C<sv> to UTF-8 first if not already
+UTF-8. Similiarly, the other forms with C<utf8> in their names correspond to
+their respective forms without.
+
+C<SvPVutf8_or_null> and C<SvPVutf8_or_null_nomg> don't have corresponding
+non-C<utf8> forms. Instead they are like C<SvPVutf8_nomg>, but when C<sv> is
+undef, they return C<NULL>.
+
+C<SvPVbyte> is like C<SvPV>, but converts C<sv> to byte representation first if
+currently encoded as UTF-8. If C<sv> cannot be downgraded from UTF-8, it
+croaks. Similiarly, the other forms with C<byte> in their names correspond to
+their respective forms without.
+
+C<SvPVbyte_or_null> doesn't have a corresponding non-C<byte> form. Instead it
+is like C<SvPVbyte>, but when C<sv> is undef, it returns C<NULL>.
+
+=for apidoc Am|IV|SvIV|SV* sv
+=for apidoc_item SvIVx
+=for apidoc_item SvIV_nomg
-=for apidoc Am|IV|SvIVx|SV* sv
-Coerces the given SV to IV and returns it. The returned value in many
+These coerce the given SV to IV and return it. The returned value in many
circumstances will get stored in C<sv>'s IV slot, but not in all cases. (Use
C<L</sv_setiv>> to make sure it does).
-This form guarantees to evaluate C<sv> only once. Only use this if C<sv> is an
-expression with side effects, otherwise use the more efficient C<SvIV>.
+C<SvIVx> is different from the others in that it is guaranteed to evaluate
+C<sv> exactly once; the others may evaluate it multiple times. Only use this
+form if C<sv> is an expression with side effects, otherwise use the more
+efficient C<SvIV>.
-=for apidoc Am|NV|SvNV|SV* sv
-Coerces the given SV to NV and returns it. The returned value in many
-circumstances will get stored in C<sv>'s NV slot, but not in all cases. (Use
-C<L</sv_setnv>> to make sure it does).
+C<SvIV_nomg> is the same as C<SvIV>, but does not perform 'get' magic.
-See C<L</SvNVx>> for a version which guarantees to evaluate C<sv> only once.
-
-=for apidoc Am|NV|SvNV_nomg|SV* sv
-Like C<SvNV> but doesn't process magic.
+=for apidoc Am|NV|SvNV|SV* sv
+=for apidoc_item SvNVx
+=for apidoc_item SvNV_nomg
-=for apidoc Am|NV|SvNVx|SV* sv
-Coerces the given SV to NV and returns it. The returned value in many
+These coerce the given SV to NV and return it. The returned value in many
circumstances will get stored in C<sv>'s NV slot, but not in all cases. (Use
C<L</sv_setnv>> to make sure it does).
-This form guarantees to evaluate C<sv> only once. Only use this if C<sv> is an
-expression with side effects, otherwise use the more efficient C<SvNV>.
+C<SvNVx> is different from the others in that it is guaranteed to evaluate
+C<sv> exactly once; the others may evaluate it multiple times. Only use this
+form if C<sv> is an expression with side effects, otherwise use the more
+efficient C<SvNV>.
+
+C<SvNV_nomg> is the same as C<SvNV>, but does not perform 'get' magic.
=for apidoc Am|UV|SvUV|SV* sv
-Coerces the given SV to UV and returns it. The returned value in many
+=for apidoc_item SvUVx
+=for apidoc_item SvUV_nomg
+
+These coerce the given SV to UV and return it. The returned value in many
circumstances will get stored in C<sv>'s UV slot, but not in all cases. (Use
C<L</sv_setuv>> to make sure it does).
-See C<L</SvUVx>> for a version which guarantees to evaluate C<sv> only once.
-
-=for apidoc Am|UV|SvUV_nomg|SV* sv
-Like C<SvUV> but doesn't process magic.
+C<SvUVx> is different from the others in that it is guaranteed to evaluate
+C<sv> exactly once; the others may evaluate it multiple times. Only use this
+form if C<sv> is an expression with side effects, otherwise use the more
+efficient C<SvUV>.
-=for apidoc Am|UV|SvUVx|SV* sv
-Coerces the given SV to UV and returns it. The returned value in many
-circumstances will get stored in C<sv>'s UV slot, but not in all cases. (Use
-C<L</sv_setuv>> to make sure it does).
+C<SvUV_nomg> is the same as C<SvUV>, but does not perform 'get' magic.
-This form guarantees to evaluate C<sv> only once. Only use this if C<sv> is an
-expression with side effects, otherwise use the more efficient C<SvUV>.
+=for apidoc SvTRUE
+=for apidoc_item SvTRUEx
+=for apidoc_item SvTRUE_nomg
+=for apidoc_item SvTRUE_NN
+=for apidoc_item SvTRUE_nomg_NN
-=for apidoc Am|bool|SvTRUE|SV* sv
-Returns a boolean indicating whether Perl would evaluate the SV as true or
-false. See C<L</SvOK>> for a defined/undefined test. Handles 'get' magic
-unless the scalar is already C<SvPOK>, C<SvIOK> or C<SvNOK> (the public, not the
-private flags).
+These return a boolean indicating whether Perl would evaluate the SV as true or
+false. See C<L</SvOK>> for a defined/undefined test.
-See C<L</SvTRUEx>> for a version which guarantees to evaluate C<sv> only once.
+As of Perl 5.32, all are guaranteed to evaluate C<sv> only once. Prior to that
+release, only C<SvTRUEx> guaranteed single evaluation; now C<SvTRUEx> is
+identical to C<SvTRUE>.
-=for apidoc Am|bool|SvTRUE_nomg|SV* sv
-Returns a boolean indicating whether Perl would evaluate the SV as true or
-false. See C<L</SvOK>> for a defined/undefined test. Does not handle 'get' magic.
+C<SvTRUE_nomg> and C<TRUE_nomg_NN> do not perform 'get' magic; the others do
+unless the scalar is already C<SvPOK>, C<SvIOK>, or C<SvNOK> (the public, not
+the private flags).
-=for apidoc Am|bool|SvTRUEx|SV* sv
-Returns a boolean indicating whether Perl would evaluate the SV as true or
-false. See C<L</SvOK>> for a defined/undefined test. Handles 'get' magic
-unless the scalar is already C<SvPOK>, C<SvIOK> or C<SvNOK> (the public, not the
-private flags).
+C<SvTRUE_NN> is like C<L</SvTRUE>>, but C<sv> is assumed to be
+non-null (NN). If there is a possibility that it is NULL, use plain
+C<SvTRUE>.
-This form guarantees to evaluate C<sv> only once. Only use this if C<sv> is an
-expression with side effects, otherwise use the more efficient C<SvTRUE>.
+C<SvTRUE_nomg_NN> is like C<L</SvTRUE_nomg>>, but C<sv> is assumed to be
+non-null (NN). If there is a possibility that it is NULL, use plain
+C<SvTRUE_nomg>.
=for apidoc Am|char*|SvPVutf8_force|SV* sv|STRLEN len
Like C<SvPV_force>, but converts C<sv> to UTF-8 first if necessary.
@@ -1661,26 +1817,6 @@ Like C<SvPVbyte_or_null>, but does not process get magic.
Like C<SvPV_nolen>, but converts C<sv> to byte representation first if
necessary. If the SV cannot be downgraded from UTF-8, this croaks.
-=for apidoc Am|char*|SvPVutf8x_force|SV* sv|STRLEN len
-Like C<SvPV_force>, but converts C<sv> to UTF-8 first if necessary.
-Guarantees to evaluate C<sv> only once; use the more efficient C<SvPVutf8_force>
-otherwise.
-
-=for apidoc Am|char*|SvPVutf8x|SV* sv|STRLEN len
-Like C<SvPV>, but converts C<sv> to UTF-8 first if necessary.
-Guarantees to evaluate C<sv> only once; use the more efficient C<SvPVutf8>
-otherwise.
-
-=for apidoc Am|char*|SvPVbytex_force|SV* sv|STRLEN len
-Like C<SvPV_force>, but converts C<sv> to byte representation first if necessary.
-Guarantees to evaluate C<sv> only once; use the more efficient C<SvPVbyte_force>
-otherwise. If the SV cannot be downgraded from UTF-8, this croaks.
-
-=for apidoc Am|char*|SvPVbytex|SV* sv|STRLEN len
-Like C<SvPV>, but converts C<sv> to byte representation first if necessary.
-Guarantees to evaluate C<sv> only once; use the more efficient C<SvPVbyte>
-otherwise. If the SV cannot be downgraded from UTF-8, this croaks.
-
=for apidoc Am|U32|SvIsCOW|SV* sv
Returns a U32 value indicating whether the SV is Copy-On-Write (either shared
hash key scalars, or full Copy On Write scalars if 5.9.0 is configured for
@@ -1690,18 +1826,6 @@ COW).
Returns a boolean indicating whether the SV is Copy-On-Write shared hash key
scalar.
-=for apidoc Am|void|sv_catpvn_nomg|SV* sv|const char* ptr|STRLEN len
-Like C<sv_catpvn> but doesn't process magic.
-
-=for apidoc Am|void|sv_catpv_nomg|SV* sv|const char* ptr
-Like C<sv_catpv> but doesn't process magic.
-
-=for apidoc Am|void|sv_setsv_nomg|SV* dsv|SV* ssv
-Like C<sv_setsv> but doesn't process magic.
-
-=for apidoc Am|void|sv_catsv_nomg|SV* dsv|SV* ssv
-Like C<sv_catsv> but doesn't process magic.
-
=cut
*/
@@ -1711,50 +1835,50 @@ Like C<sv_catsv> but doesn't process magic.
#define SvNV(sv) (SvNOK_nog(sv) ? SvNVX(sv) : sv_2nv(sv))
#define SvIV_nomg(sv) (SvIOK(sv) ? SvIVX(sv) : sv_2iv_flags(sv, 0))
-#define SvUV_nomg(sv) (SvIOK(sv) ? SvUVX(sv) : sv_2uv_flags(sv, 0))
+#define SvUV_nomg(sv) (SvUOK(sv) ? SvUVX(sv) : sv_2uv_flags(sv, 0))
#define SvNV_nomg(sv) (SvNOK(sv) ? SvNVX(sv) : sv_2nv_flags(sv, 0))
/* ----*/
-#define SvPV(sv, lp) SvPV_flags(sv, lp, SV_GMAGIC)
-#define SvPV_const(sv, lp) SvPV_flags_const(sv, lp, SV_GMAGIC)
-#define SvPV_mutable(sv, lp) SvPV_flags_mutable(sv, lp, SV_GMAGIC)
+#define SvPV(sv, len) SvPV_flags(sv, len, SV_GMAGIC)
+#define SvPV_const(sv, len) SvPV_flags_const(sv, len, SV_GMAGIC)
+#define SvPV_mutable(sv, len) SvPV_flags_mutable(sv, len, SV_GMAGIC)
-#define SvPV_flags(sv, lp, flags) \
+#define SvPV_flags(sv, len, flags) \
(SvPOK_nog(sv) \
- ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pv_flags(sv, &lp, flags))
-#define SvPV_flags_const(sv, lp, flags) \
+ ? ((len = SvCUR(sv)), SvPVX(sv)) : sv_2pv_flags(sv, &len, flags))
+#define SvPV_flags_const(sv, len, flags) \
(SvPOK_nog(sv) \
- ? ((lp = SvCUR(sv)), SvPVX_const(sv)) : \
- (const char*) sv_2pv_flags(sv, &lp, (flags|SV_CONST_RETURN)))
+ ? ((len = SvCUR(sv)), SvPVX_const(sv)) : \
+ (const char*) sv_2pv_flags(sv, &len, (flags|SV_CONST_RETURN)))
#define SvPV_flags_const_nolen(sv, flags) \
(SvPOK_nog(sv) \
? SvPVX_const(sv) : \
(const char*) sv_2pv_flags(sv, 0, (flags|SV_CONST_RETURN)))
-#define SvPV_flags_mutable(sv, lp, flags) \
+#define SvPV_flags_mutable(sv, len, flags) \
(SvPOK_nog(sv) \
- ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) : \
- sv_2pv_flags(sv, &lp, (flags|SV_MUTABLE_RETURN)))
+ ? ((len = SvCUR(sv)), SvPVX_mutable(sv)) : \
+ sv_2pv_flags(sv, &len, (flags|SV_MUTABLE_RETURN)))
-#define SvPV_force(sv, lp) SvPV_force_flags(sv, lp, SV_GMAGIC)
+#define SvPV_force(sv, len) SvPV_force_flags(sv, len, SV_GMAGIC)
#define SvPV_force_nolen(sv) SvPV_force_flags_nolen(sv, SV_GMAGIC)
-#define SvPV_force_mutable(sv, lp) SvPV_force_flags_mutable(sv, lp, SV_GMAGIC)
+#define SvPV_force_mutable(sv, len) SvPV_force_flags_mutable(sv, len, SV_GMAGIC)
-#define SvPV_force_nomg(sv, lp) SvPV_force_flags(sv, lp, 0)
+#define SvPV_force_nomg(sv, len) SvPV_force_flags(sv, len, 0)
#define SvPV_force_nomg_nolen(sv) SvPV_force_flags_nolen(sv, 0)
-#define SvPV_force_flags(sv, lp, flags) \
+#define SvPV_force_flags(sv, len, flags) \
(SvPOK_pure_nogthink(sv) \
- ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvn_force_flags(sv, &lp, flags))
+ ? ((len = SvCUR(sv)), SvPVX(sv)) : sv_pvn_force_flags(sv, &len, flags))
#define SvPV_force_flags_nolen(sv, flags) \
(SvPOK_pure_nogthink(sv) \
? SvPVX(sv) : sv_pvn_force_flags(sv, 0, flags))
-#define SvPV_force_flags_mutable(sv, lp, flags) \
+#define SvPV_force_flags_mutable(sv, len, flags) \
(SvPOK_pure_nogthink(sv) \
- ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) \
- : sv_pvn_force_flags(sv, &lp, flags|SV_MUTABLE_RETURN))
+ ? ((len = SvCUR(sv)), SvPVX_mutable(sv)) \
+ : sv_pvn_force_flags(sv, &len, flags|SV_MUTABLE_RETURN))
#define SvPV_nolen(sv) \
(SvPOK_nog(sv) \
@@ -1769,33 +1893,33 @@ Like C<sv_catsv> but doesn't process magic.
(SvPOK_nog(sv) \
? SvPVX_const(sv) : sv_2pv_flags(sv, 0, SV_GMAGIC|SV_CONST_RETURN))
-#define SvPV_nomg(sv, lp) SvPV_flags(sv, lp, 0)
-#define SvPV_nomg_const(sv, lp) SvPV_flags_const(sv, lp, 0)
+#define SvPV_nomg(sv, len) SvPV_flags(sv, len, 0)
+#define SvPV_nomg_const(sv, len) SvPV_flags_const(sv, len, 0)
#define SvPV_nomg_const_nolen(sv) SvPV_flags_const_nolen(sv, 0)
/* ----*/
-#define SvPVutf8(sv, lp) \
+#define SvPVutf8(sv, len) \
(SvPOK_utf8_nog(sv) \
- ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvutf8(sv, &lp))
+ ? ((len = SvCUR(sv)), SvPVX(sv)) : sv_2pvutf8(sv, &len))
-#define SvPVutf8_or_null(sv, lp) \
+#define SvPVutf8_or_null(sv, len) \
(SvPOK_utf8_nog(sv) \
- ? ((lp = SvCUR(sv)), SvPVX(sv)) : (SvGETMAGIC(sv), SvOK(sv)) \
- ? sv_2pvutf8_flags(sv, &lp, 0) : ((lp = 0), NULL))
+ ? ((len = SvCUR(sv)), SvPVX(sv)) : (SvGETMAGIC(sv), SvOK(sv)) \
+ ? sv_2pvutf8_flags(sv, &len, 0) : ((len = 0), NULL))
-#define SvPVutf8_nomg(sv, lp) \
+#define SvPVutf8_nomg(sv, len) \
(SvPOK_utf8_nog(sv) \
- ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvutf8_flags(sv, &lp, 0))
+ ? ((len = SvCUR(sv)), SvPVX(sv)) : sv_2pvutf8_flags(sv, &len, 0))
-#define SvPVutf8_or_null_nomg(sv, lp) \
+#define SvPVutf8_or_null_nomg(sv, len) \
(SvPOK_utf8_nog(sv) \
- ? ((lp = SvCUR(sv)), SvPVX(sv)) : SvOK(sv) \
- ? sv_2pvutf8_flags(sv, &lp, 0) : ((lp = 0), NULL))
+ ? ((len = SvCUR(sv)), SvPVX(sv)) : SvOK(sv) \
+ ? sv_2pvutf8_flags(sv, &len, 0) : ((len = 0), NULL))
-#define SvPVutf8_force(sv, lp) \
+#define SvPVutf8_force(sv, len) \
(SvPOK_utf8_pure_nogthink(sv) \
- ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvutf8n_force(sv, &lp))
+ ? ((len = SvCUR(sv)), SvPVX(sv)) : sv_pvutf8n_force(sv, &len))
#define SvPVutf8_nolen(sv) \
(SvPOK_utf8_nog(sv) \
@@ -1803,27 +1927,27 @@ Like C<sv_catsv> but doesn't process magic.
/* ----*/
-#define SvPVbyte(sv, lp) \
+#define SvPVbyte(sv, len) \
(SvPOK_byte_nog(sv) \
- ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &lp))
+ ? ((len = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &len))
-#define SvPVbyte_or_null(sv, lp) \
+#define SvPVbyte_or_null(sv, len) \
(SvPOK_byte_nog(sv) \
- ? ((lp = SvCUR(sv)), SvPVX(sv)) : (SvGETMAGIC(sv), SvOK(sv)) \
- ? sv_2pvbyte_flags(sv, &lp, 0) : ((lp = 0), NULL))
+ ? ((len = SvCUR(sv)), SvPVX(sv)) : (SvGETMAGIC(sv), SvOK(sv)) \
+ ? sv_2pvbyte_flags(sv, &len, 0) : ((len = 0), NULL))
-#define SvPVbyte_nomg(sv, lp) \
+#define SvPVbyte_nomg(sv, len) \
(SvPOK_byte_nog(sv) \
- ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte_flags(sv, &lp, 0))
+ ? ((len = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte_flags(sv, &len, 0))
-#define SvPVbyte_or_null_nomg(sv, lp) \
+#define SvPVbyte_or_null_nomg(sv, len) \
(SvPOK_utf8_nog(sv) \
- ? ((lp = SvCUR(sv)), SvPVX(sv)) : SvOK(sv) \
- ? sv_2pvbyte_flags(sv, &lp, 0) : ((lp = 0), NULL))
+ ? ((len = SvCUR(sv)), SvPVX(sv)) : SvOK(sv) \
+ ? sv_2pvbyte_flags(sv, &len, 0) : ((len = 0), NULL))
-#define SvPVbyte_force(sv, lp) \
+#define SvPVbyte_force(sv, len) \
(SvPOK_byte_pure_nogthink(sv) \
- ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvbyten_force(sv, &lp))
+ ? ((len = SvCUR(sv)), SvPVX(sv)) : sv_pvbyten_force(sv, &len))
#define SvPVbyte_nolen(sv) \
(SvPOK_byte_nog(sv) \
@@ -1835,43 +1959,26 @@ Like C<sv_catsv> but doesn't process magic.
* failing that, call a function to do the work
*/
-#define SvPVx_force(sv, lp) sv_pvn_force(sv, &lp)
-#define SvPVutf8x_force(sv, lp) sv_pvutf8n_force(sv, &lp)
-#define SvPVbytex_force(sv, lp) sv_pvbyten_force(sv, &lp)
-
-#define SvTRUE(sv) Perl_SvTRUE(aTHX_ sv)
-#define SvTRUE_nomg(sv) (LIKELY(sv) && SvTRUE_nomg_NN(sv))
-#define SvTRUE_NN(sv) (SvGETMAGIC(sv), SvTRUE_nomg_NN(sv))
-#define SvTRUE_nomg_NN(sv) (SvTRUE_common(sv, sv_2bool_nomg(sv)))
-
-#define SvTRUE_common(sv,fallback) ( \
- SvIMMORTAL_INTERP(sv) \
- ? SvIMMORTAL_TRUE(sv) \
- : !SvOK(sv) \
- ? 0 \
- : SvPOK(sv) \
- ? SvPVXtrue(sv) \
- : SvIOK(sv) \
- ? (SvIVX(sv) != 0 /* cast to bool */) \
- : (SvROK(sv) && !( SvOBJECT(SvRV(sv)) \
- && HvAMAGIC(SvSTASH(SvRV(sv))))) \
- ? TRUE \
- : (fallback))
-
-#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+#define SvPVx_force(sv, len) sv_pvn_force(sv, &len)
+#define SvPVutf8x_force(sv, len) sv_pvutf8n_force(sv, &len)
+#define SvPVbytex_force(sv, len) sv_pvbyten_force(sv, &len)
+
+#define SvTRUEx(sv) SvTRUE(sv)
+#define SvTRUEx_nomg(sv) SvTRUE_nomg(sv)
+#define SvTRUE_nomg_NN(sv) SvTRUE_common(sv, TRUE)
+
+#if defined(PERL_USE_GCC_BRACE_GROUPS)
# define SvIVx(sv) ({SV *_sv = MUTABLE_SV(sv); SvIV(_sv); })
# define SvUVx(sv) ({SV *_sv = MUTABLE_SV(sv); SvUV(_sv); })
# define SvNVx(sv) ({SV *_sv = MUTABLE_SV(sv); SvNV(_sv); })
-# define SvPVx(sv, lp) ({SV *_sv = (sv); SvPV(_sv, lp); })
-# define SvPVx_const(sv, lp) ({SV *_sv = (sv); SvPV_const(_sv, lp); })
+# define SvPVx(sv, len) ({SV *_sv = (sv); SvPV(_sv, len); })
+# define SvPVx_const(sv, len) ({SV *_sv = (sv); SvPV_const(_sv, len); })
# define SvPVx_nolen(sv) ({SV *_sv = (sv); SvPV_nolen(_sv); })
# define SvPVx_nolen_const(sv) ({SV *_sv = (sv); SvPV_nolen_const(_sv); })
-# define SvPVutf8x(sv, lp) ({SV *_sv = (sv); SvPVutf8(_sv, lp); })
-# define SvPVbytex(sv, lp) ({SV *_sv = (sv); SvPVbyte(_sv, lp); })
+# define SvPVutf8x(sv, len) ({SV *_sv = (sv); SvPVutf8(_sv, len); })
+# define SvPVbytex(sv, len) ({SV *_sv = (sv); SvPVbyte(_sv, len); })
# define SvPVbytex_nolen(sv) ({SV *_sv = (sv); SvPVbyte_nolen(_sv); })
-# define SvTRUEx(sv) ({SV *_sv = (sv); SvTRUE(_sv); })
-# define SvTRUEx_nomg(sv) ({SV *_sv = (sv); SvTRUE_nomg(_sv); })
#else /* __GNUC__ */
@@ -1881,15 +1988,13 @@ Like C<sv_catsv> but doesn't process magic.
# define SvIVx(sv) ((PL_Sv = (sv)), SvIV(PL_Sv))
# define SvUVx(sv) ((PL_Sv = (sv)), SvUV(PL_Sv))
# define SvNVx(sv) ((PL_Sv = (sv)), SvNV(PL_Sv))
-# define SvPVx(sv, lp) ((PL_Sv = (sv)), SvPV(PL_Sv, lp))
-# define SvPVx_const(sv, lp) ((PL_Sv = (sv)), SvPV_const(PL_Sv, lp))
+# define SvPVx(sv, len) ((PL_Sv = (sv)), SvPV(PL_Sv, len))
+# define SvPVx_const(sv, len) ((PL_Sv = (sv)), SvPV_const(PL_Sv, len))
# define SvPVx_nolen(sv) ((PL_Sv = (sv)), SvPV_nolen(PL_Sv))
# define SvPVx_nolen_const(sv) ((PL_Sv = (sv)), SvPV_nolen_const(PL_Sv))
-# define SvPVutf8x(sv, lp) ((PL_Sv = (sv)), SvPVutf8(PL_Sv, lp))
-# define SvPVbytex(sv, lp) ((PL_Sv = (sv)), SvPVbyte(PL_Sv, lp))
+# define SvPVutf8x(sv, len) ((PL_Sv = (sv)), SvPVutf8(PL_Sv, len))
+# define SvPVbytex(sv, len) ((PL_Sv = (sv)), SvPVbyte(PL_Sv, len))
# define SvPVbytex_nolen(sv) ((PL_Sv = (sv)), SvPVbyte_nolen(PL_Sv))
-# define SvTRUEx(sv) ((PL_Sv = (sv)), SvTRUE(PL_Sv))
-# define SvTRUEx_nomg(sv) ((PL_Sv = (sv)), SvTRUE_nomg(PL_Sv))
#endif /* __GNU__ */
#define SvPVXtrue(sv) ( \
@@ -1910,10 +2015,23 @@ Like C<sv_catsv> but doesn't process magic.
#define SvSHARED_HEK_FROM_PV(pvx) \
((struct hek*)(pvx - STRUCT_OFFSET(struct hek, hek_key)))
+/*
+=for apidoc Am|struct hek*|SvSHARED_HASH|SV * sv
+Returns the hash for C<sv> created by C<L</newSVpvn_share>>.
+
+=cut
+*/
#define SvSHARED_HASH(sv) (0 + SvSHARED_HEK_FROM_PV(SvPVX_const(sv))->hek_hash)
/* flag values for sv_*_flags functions */
#define SV_UTF8_NO_ENCODING 0 /* No longer used */
+
+/*
+=for apidoc AmnhD||SV_UTF8_NO_ENCODING
+
+=cut
+*/
+
#define SV_IMMEDIATE_UNREF 1
#define SV_GMAGIC 2
#define SV_COW_DROP_PV 4
@@ -1976,7 +2094,7 @@ Like C<sv_catsv> but doesn't process magic.
&& SvCUR(sv)+1 < SvLEN(sv))
/* Note: To allow 256 COW "copies", a refcnt of 0 means 1. */
# define CowREFCNT(sv) (*(U8 *)(SvPVX(sv)+SvLEN(sv)-1))
-# define SV_COW_REFCNT_MAX ((1 << sizeof(U8)*8) - 1)
+# define SV_COW_REFCNT_MAX nBIT_UMAX(sizeof(U8) * CHARBITS)
# define CAN_COW_MASK (SVf_POK|SVf_ROK|SVp_POK|SVf_FAKE| \
SVf_OOK|SVf_BREAK|SVf_READONLY|SVf_PROTECT)
#endif
@@ -2007,7 +2125,7 @@ Like C<sv_catsv> but doesn't process magic.
#define sv_catsv_nomg(dsv, ssv) sv_catsv_flags(dsv, ssv, 0)
#define sv_catsv_mg(dsv, ssv) sv_catsv_flags(dsv, ssv, SV_GMAGIC|SV_SMAGIC)
#define sv_catpvn(dsv, sstr, slen) sv_catpvn_flags(dsv, sstr, slen, SV_GMAGIC)
-#define sv_catpvn_mg(sv, sstr, slen) sv_catpvn_flags(sv, sstr, slen, SV_GMAGIC|SV_SMAGIC);
+#define sv_catpvn_mg(dsv, sstr, slen) sv_catpvn_flags(dsv, sstr, slen, SV_GMAGIC|SV_SMAGIC);
#define sv_copypv(dsv, ssv) sv_copypv_flags(dsv, ssv, SV_GMAGIC)
#define sv_copypv_nomg(dsv, ssv) sv_copypv_flags(dsv, ssv, 0)
#define sv_2pv(sv, lp) sv_2pv_flags(sv, lp, SV_GMAGIC)
@@ -2025,7 +2143,7 @@ Like C<sv_catsv> but doesn't process magic.
#define sv_eq(sv1, sv2) sv_eq_flags(sv1, sv2, SV_GMAGIC)
#define sv_cmp(sv1, sv2) sv_cmp_flags(sv1, sv2, SV_GMAGIC)
#define sv_cmp_locale(sv1, sv2) sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC)
-#define sv_collxfrm(sv, nxp) sv_cmp_flags(sv, nxp, SV_GMAGIC)
+#define sv_collxfrm(sv, nxp) sv_collxfrm_flags(sv, nxp, SV_GMAGIC)
#define sv_2bool(sv) sv_2bool_flags(sv, SV_GMAGIC)
#define sv_2bool_nomg(sv) sv_2bool_flags(sv, 0)
#define sv_insert(bigstr, offset, len, little, littlelen) \
@@ -2062,10 +2180,11 @@ Like C<sv_catsv> but doesn't process magic.
#endif
/*
-=for apidoc Am|SV*|newRV_inc|SV* sv
+=for apidoc newRV
+=for apidoc_item ||newRV_inc|
-Creates an RV wrapper for an SV. The reference count for the original SV is
-incremented.
+These are identical. They create an RV wrapper for an SV. The reference count
+for the original SV is incremented.
=cut
*/
@@ -2075,32 +2194,35 @@ incremented.
/* the following macros update any magic values this C<sv> is associated with */
/*
-=head1 Magical Functions
+=for apidoc_section $SV
=for apidoc Am|void|SvGETMAGIC|SV* sv
-Invokes C<mg_get> on an SV if it has 'get' magic. For example, this
+Invokes C<L</mg_get>> on an SV if it has 'get' magic. For example, this
will call C<FETCH> on a tied variable. This macro evaluates its
argument more than once.
=for apidoc Am|void|SvSETMAGIC|SV* sv
-Invokes C<mg_set> on an SV if it has 'set' magic. This is necessary
+Invokes C<L</mg_set>> on an SV if it has 'set' magic. This is necessary
after modifying a scalar, in case it is a magical variable like C<$|>
or a tied variable (it calls C<STORE>). This macro evaluates its
argument more than once.
=for apidoc Am|void|SvSetSV|SV* dsv|SV* ssv
-Calls C<sv_setsv> if C<dsv> is not the same as C<ssv>. May evaluate arguments
-more than once. Does not handle 'set' magic on the destination SV.
+=for apidoc_item SvSetMagicSV
+=for apidoc_item SvSetSV_nosteal
+=for apidoc_item SvSetMagicSV_nosteal
+
+if C<dsv> is the same as C<ssv>, these do nothing. Otherwise they all call
+some form of C<L</sv_setsv>>. They may evaluate their arguments more than
+once.
-=for apidoc Am|void|SvSetSV_nosteal|SV* dsv|SV* ssv
-Calls a non-destructive version of C<sv_setsv> if C<dsv> is not the same as
-C<ssv>. May evaluate arguments more than once.
+The only differences are:
-=for apidoc Am|void|SvSetMagicSV|SV* dsv|SV* ssv
-Like C<SvSetSV>, but does any set magic required afterwards.
+C<SvSetMagicSV> and C<SvSetMagicSV_nosteal> perform any required 'set' magic
+afterwards on the destination SV; C<SvSetSV> and C<SvSetSV_nosteal> do not.
-=for apidoc Am|void|SvSetMagicSV_nosteal|SV* dsv|SV* ssv
-Like C<SvSetSV_nosteal>, but does any set magic required afterwards.
+C<SvSetSV_nosteal> C<SvSetMagicSV_nosteal> call a non-destructive version of
+C<sv_setsv>.
=for apidoc Am|void|SvSHARE|SV* sv
Arranges for C<sv> to be shared between threads if a suitable module
@@ -2114,7 +2236,7 @@ has been loaded.
Releases a mutual exclusion lock on C<sv> if a suitable module
has been loaded.
-=head1 SV Manipulation Functions
+=for apidoc_section $SV
=for apidoc Am|char *|SvGROW|SV* sv|STRLEN len
Expands the character buffer in the SV so that it has room for the
@@ -2212,6 +2334,13 @@ See also C<L</PL_sv_yes>> and C<L</PL_sv_no>>.
#define isGV(sv) (SvTYPE(sv) == SVt_PVGV)
/* If I give every macro argument a different name, then there won't be bugs
where nested macros get confused. Been there, done that. */
+/*
+=for apidoc Am|bool|isGV_with_GP|SV * sv
+Returns a boolean as to whether or not C<sv> is a GV with a pointer to a GP
+(glob pointer).
+
+=cut
+*/
#define isGV_with_GP(pwadak) \
(((SvFLAGS(pwadak) & (SVp_POK|SVpgv_GP)) == SVpgv_GP) \
&& (SvTYPE(pwadak) == SVt_PVGV || SvTYPE(pwadak) == SVt_PVLV))
@@ -2305,7 +2434,7 @@ Evaluates C<sv> more than once. Sets C<len> to 0 if C<SvOOK(sv)> is false.
10:28 <+meta> Nicholas: crash
*/
# define SvOOK_offset(sv, offset) STMT_START { \
- assert(sizeof(offset) == sizeof(STRLEN)); \
+ STATIC_ASSERT_STMT(sizeof(offset) == sizeof(STRLEN)); \
if (SvOOK(sv)) { \
const U8 *_crash = (U8*)SvPVX_const(sv); \
(offset) = *--_crash; \
@@ -2329,7 +2458,7 @@ Evaluates C<sv> more than once. Sets C<len> to 0 if C<SvOOK(sv)> is false.
#else
/* This is the same code, but avoids using any temporary variables: */
# define SvOOK_offset(sv, offset) STMT_START { \
- assert(sizeof(offset) == sizeof(STRLEN)); \
+ STATIC_ASSERT_STMT(sizeof(offset) == sizeof(STRLEN)); \
if (SvOOK(sv)) { \
(offset) = ((U8*)SvPVX_const(sv))[-1]; \
if (!(offset)) { \
@@ -2344,51 +2473,54 @@ Evaluates C<sv> more than once. Sets C<len> to 0 if C<SvOOK(sv)> is false.
#define newIO() MUTABLE_IO(newSV_type(SVt_PVIO))
-#define SV_CONST(name) \
+#if defined(PERL_CORE) || defined(PERL_EXT)
+
+# define SV_CONST(name) \
PL_sv_consts[SV_CONST_##name] \
? PL_sv_consts[SV_CONST_##name] \
: (PL_sv_consts[SV_CONST_##name] = newSVpv_share(#name, 0))
-#define SV_CONST_TIESCALAR 0
-#define SV_CONST_TIEARRAY 1
-#define SV_CONST_TIEHASH 2
-#define SV_CONST_TIEHANDLE 3
-
-#define SV_CONST_FETCH 4
-#define SV_CONST_FETCHSIZE 5
-#define SV_CONST_STORE 6
-#define SV_CONST_STORESIZE 7
-#define SV_CONST_EXISTS 8
-
-#define SV_CONST_PUSH 9
-#define SV_CONST_POP 10
-#define SV_CONST_SHIFT 11
-#define SV_CONST_UNSHIFT 12
-#define SV_CONST_SPLICE 13
-#define SV_CONST_EXTEND 14
-
-#define SV_CONST_FIRSTKEY 15
-#define SV_CONST_NEXTKEY 16
-#define SV_CONST_SCALAR 17
-
-#define SV_CONST_OPEN 18
-#define SV_CONST_WRITE 19
-#define SV_CONST_PRINT 20
-#define SV_CONST_PRINTF 21
-#define SV_CONST_READ 22
-#define SV_CONST_READLINE 23
-#define SV_CONST_GETC 24
-#define SV_CONST_SEEK 25
-#define SV_CONST_TELL 26
-#define SV_CONST_EOF 27
-#define SV_CONST_BINMODE 28
-#define SV_CONST_FILENO 29
-#define SV_CONST_CLOSE 30
-
-#define SV_CONST_DELETE 31
-#define SV_CONST_CLEAR 32
-#define SV_CONST_UNTIE 33
-#define SV_CONST_DESTROY 34
+# define SV_CONST_TIESCALAR 0
+# define SV_CONST_TIEARRAY 1
+# define SV_CONST_TIEHASH 2
+# define SV_CONST_TIEHANDLE 3
+
+# define SV_CONST_FETCH 4
+# define SV_CONST_FETCHSIZE 5
+# define SV_CONST_STORE 6
+# define SV_CONST_STORESIZE 7
+# define SV_CONST_EXISTS 8
+
+# define SV_CONST_PUSH 9
+# define SV_CONST_POP 10
+# define SV_CONST_SHIFT 11
+# define SV_CONST_UNSHIFT 12
+# define SV_CONST_SPLICE 13
+# define SV_CONST_EXTEND 14
+
+# define SV_CONST_FIRSTKEY 15
+# define SV_CONST_NEXTKEY 16
+# define SV_CONST_SCALAR 17
+
+# define SV_CONST_OPEN 18
+# define SV_CONST_WRITE 19
+# define SV_CONST_PRINT 20
+# define SV_CONST_PRINTF 21
+# define SV_CONST_READ 22
+# define SV_CONST_READLINE 23
+# define SV_CONST_GETC 24
+# define SV_CONST_SEEK 25
+# define SV_CONST_TELL 26
+# define SV_CONST_EOF 27
+# define SV_CONST_BINMODE 28
+# define SV_CONST_FILENO 29
+# define SV_CONST_CLOSE 30
+
+# define SV_CONST_DELETE 31
+# define SV_CONST_CLEAR 32
+# define SV_CONST_UNTIE 33
+# define SV_CONST_DESTROY 34
+#endif
#define SV_CONSTS_COUNT 35
diff --git a/Master/tlpkg/tlperl/lib/CORE/sys/socket.h b/Master/tlpkg/tlperl/lib/CORE/sys/socket.h
index 5374a806f53..8f93fa04297 100644
--- a/Master/tlpkg/tlperl/lib/CORE/sys/socket.h
+++ b/Master/tlpkg/tlperl/lib/CORE/sys/socket.h
@@ -73,7 +73,7 @@ int win32_recv (SOCKET s, char * buf, int len, int flags);
int win32_recvfrom (SOCKET s, char * buf, int len, int flags,
struct sockaddr *from, int * fromlen);
int win32_select (int nfds, Perl_fd_set *rfds, Perl_fd_set *wfds, Perl_fd_set *xfds,
- const struct timeval *timeout);
+ const struct timeval *timeout);
int win32_send (SOCKET s, const char * buf, int len, int flags);
int win32_sendto (SOCKET s, const char * buf, int len, int flags,
const struct sockaddr *to, int tolen);
diff --git a/Master/tlpkg/tlperl/lib/CORE/thread.h b/Master/tlpkg/tlperl/lib/CORE/thread.h
index 2603d549f56..dcec0c064b8 100644
--- a/Master/tlpkg/tlperl/lib/CORE/thread.h
+++ b/Master/tlpkg/tlperl/lib/CORE/thread.h
@@ -22,12 +22,12 @@
# ifdef OLD_PTHREADS_API /* Here be dragons. */
# define DETACH(t) \
STMT_START { \
- int _eC_; \
- if ((_eC_ = pthread_detach(&(t)->self))) { \
- MUTEX_UNLOCK(&(t)->mutex); \
- Perl_croak_nocontext("panic: DETACH (%d) [%s:%d]", \
- _eC_, __FILE__, __LINE__); \
- } \
+ int _eC_; \
+ if ((_eC_ = pthread_detach(&(t)->self))) { \
+ MUTEX_UNLOCK(&(t)->mutex); \
+ Perl_croak_nocontext("panic: DETACH (%d) [%s:%d]", \
+ _eC_, __FILE__, __LINE__); \
+ } \
} STMT_END
# define PERL_GET_CONTEXT Perl_get_context()
@@ -106,33 +106,33 @@
#define MUTEX_INIT(m) \
STMT_START { \
- *m = mutex_alloc(); \
- if (*m) { \
- mutex_init(*m); \
- } else { \
- Perl_croak_nocontext("panic: MUTEX_INIT [%s:%d]", \
- __FILE__, __LINE__); \
- } \
+ *m = mutex_alloc(); \
+ if (*m) { \
+ mutex_init(*m); \
+ } else { \
+ Perl_croak_nocontext("panic: MUTEX_INIT [%s:%d]", \
+ __FILE__, __LINE__); \
+ } \
} STMT_END
#define MUTEX_LOCK(m) mutex_lock(*m)
#define MUTEX_UNLOCK(m) mutex_unlock(*m)
#define MUTEX_DESTROY(m) \
STMT_START { \
- mutex_free(*m); \
- *m = 0; \
+ mutex_free(*m); \
+ *m = 0; \
} STMT_END
#define COND_INIT(c) \
STMT_START { \
- *c = condition_alloc(); \
- if (*c) { \
- condition_init(*c); \
- } \
- else { \
- Perl_croak_nocontext("panic: COND_INIT [%s:%d]", \
- __FILE__, __LINE__); \
- } \
+ *c = condition_alloc(); \
+ if (*c) { \
+ condition_init(*c); \
+ } \
+ else { \
+ Perl_croak_nocontext("panic: COND_INIT [%s:%d]", \
+ __FILE__, __LINE__); \
+ } \
} STMT_END
#define COND_SIGNAL(c) condition_signal(*c)
@@ -140,15 +140,11 @@
#define COND_WAIT(c, m) condition_wait(*c, *m)
#define COND_DESTROY(c) \
STMT_START { \
- condition_free(*c); \
- *c = 0; \
+ condition_free(*c); \
+ *c = 0; \
} STMT_END
-#define THREAD_CREATE(thr, f) (thr->self = cthread_fork(f, thr), 0)
-#define THREAD_POST_CREATE(thr) NOOP
-
#define THREAD_RET_TYPE any_t
-#define THREAD_RET_CAST(x) ((any_t) x)
#define DETACH(t) cthread_detach(t->self)
#define JOIN(t, avp) (*(avp) = MUTABLE_AV(cthread_join(t->self)))
@@ -186,19 +182,19 @@
/* Temporary workaround, true bug is deeper. --jhi 1999-02-25 */
# define MUTEX_INIT(m) \
STMT_START { \
- int _eC_; \
- Zero((m), 1, perl_mutex); \
- if ((_eC_ = pthread_mutex_init((m), pthread_mutexattr_default))) \
- Perl_croak_nocontext("panic: MUTEX_INIT (%d) [%s:%d]", \
- _eC_, __FILE__, __LINE__); \
+ int _eC_; \
+ Zero((m), 1, perl_mutex); \
+ if ((_eC_ = pthread_mutex_init((m), pthread_mutexattr_default))) \
+ Perl_croak_nocontext("panic: MUTEX_INIT (%d) [%s:%d]", \
+ _eC_, __FILE__, __LINE__); \
} STMT_END
# else
# define MUTEX_INIT(m) \
STMT_START { \
- int _eC_; \
- if ((_eC_ = pthread_mutex_init((m), pthread_mutexattr_default))) \
- Perl_croak_nocontext("panic: MUTEX_INIT (%d) [%s:%d]", \
- _eC_, __FILE__, __LINE__); \
+ int _eC_; \
+ if ((_eC_ = pthread_mutex_init((m), pthread_mutexattr_default))) \
+ Perl_croak_nocontext("panic: MUTEX_INIT (%d) [%s:%d]", \
+ _eC_, __FILE__, __LINE__); \
} STMT_END
# endif
@@ -212,91 +208,160 @@
# define MUTEX_LOCK(m) \
STMT_START { \
- int _eC_; \
- if ((_eC_ = perl_pthread_mutex_lock((m)))) \
- Perl_croak_nocontext("panic: MUTEX_LOCK (%d) [%s:%d]", \
- _eC_, __FILE__, __LINE__); \
+ int _eC_; \
+ if ((_eC_ = perl_pthread_mutex_lock((m)))) \
+ Perl_croak_nocontext("panic: MUTEX_LOCK (%d) [%s:%d]", \
+ _eC_, __FILE__, __LINE__); \
} STMT_END
# define MUTEX_UNLOCK(m) \
STMT_START { \
- int _eC_; \
- if ((_eC_ = perl_pthread_mutex_unlock((m)))) \
- Perl_croak_nocontext("panic: MUTEX_UNLOCK (%d) [%s:%d]", \
- _eC_, __FILE__, __LINE__); \
+ int _eC_; \
+ if ((_eC_ = perl_pthread_mutex_unlock((m)))) \
+ Perl_croak_nocontext("panic: MUTEX_UNLOCK (%d) [%s:%d]", \
+ _eC_, __FILE__, __LINE__); \
} STMT_END
# define MUTEX_DESTROY(m) \
STMT_START { \
- int _eC_; \
- if ((_eC_ = pthread_mutex_destroy((m)))) \
- Perl_croak_nocontext("panic: MUTEX_DESTROY (%d) [%s:%d]", \
- _eC_, __FILE__, __LINE__); \
+ int _eC_; \
+ if ((_eC_ = pthread_mutex_destroy((m)))) \
+ Perl_croak_nocontext("panic: MUTEX_DESTROY (%d) [%s:%d]", \
+ _eC_, __FILE__, __LINE__); \
} STMT_END
#endif /* MUTEX_INIT */
#ifndef COND_INIT
# define COND_INIT(c) \
STMT_START { \
- int _eC_; \
- if ((_eC_ = pthread_cond_init((c), pthread_condattr_default))) \
- Perl_croak_nocontext("panic: COND_INIT (%d) [%s:%d]", \
- _eC_, __FILE__, __LINE__); \
+ int _eC_; \
+ if ((_eC_ = pthread_cond_init((c), pthread_condattr_default))) \
+ Perl_croak_nocontext("panic: COND_INIT (%d) [%s:%d]", \
+ _eC_, __FILE__, __LINE__); \
} STMT_END
# define COND_SIGNAL(c) \
STMT_START { \
- int _eC_; \
- if ((_eC_ = pthread_cond_signal((c)))) \
- Perl_croak_nocontext("panic: COND_SIGNAL (%d) [%s:%d]", \
- _eC_, __FILE__, __LINE__); \
+ int _eC_; \
+ if ((_eC_ = pthread_cond_signal((c)))) \
+ Perl_croak_nocontext("panic: COND_SIGNAL (%d) [%s:%d]", \
+ _eC_, __FILE__, __LINE__); \
} STMT_END
# define COND_BROADCAST(c) \
STMT_START { \
- int _eC_; \
- if ((_eC_ = pthread_cond_broadcast((c)))) \
- Perl_croak_nocontext("panic: COND_BROADCAST (%d) [%s:%d]", \
- _eC_, __FILE__, __LINE__); \
+ int _eC_; \
+ if ((_eC_ = pthread_cond_broadcast((c)))) \
+ Perl_croak_nocontext("panic: COND_BROADCAST (%d) [%s:%d]", \
+ _eC_, __FILE__, __LINE__); \
} STMT_END
# define COND_WAIT(c, m) \
STMT_START { \
- int _eC_; \
- if ((_eC_ = pthread_cond_wait((c), (m)))) \
- Perl_croak_nocontext("panic: COND_WAIT (%d) [%s:%d]", \
- _eC_, __FILE__, __LINE__); \
+ int _eC_; \
+ if ((_eC_ = pthread_cond_wait((c), (m)))) \
+ Perl_croak_nocontext("panic: COND_WAIT (%d) [%s:%d]", \
+ _eC_, __FILE__, __LINE__); \
} STMT_END
# define COND_DESTROY(c) \
STMT_START { \
- int _eC_; \
- if ((_eC_ = pthread_cond_destroy((c)))) \
- Perl_croak_nocontext("panic: COND_DESTROY (%d) [%s:%d]", \
- _eC_, __FILE__, __LINE__); \
+ int _eC_; \
+ if ((_eC_ = pthread_cond_destroy((c)))) \
+ Perl_croak_nocontext("panic: COND_DESTROY (%d) [%s:%d]", \
+ _eC_, __FILE__, __LINE__); \
} STMT_END
#endif /* COND_INIT */
+#if defined(MUTEX_LOCK) && defined(MUTEX_UNLOCK) \
+ && defined(COND_SIGNAL) && defined(COND_WAIT)
+
+/* These emulate native many-reader/1-writer locks.
+ * Basically a locking reader just locks the semaphore long enough to increment
+ * a counter; and similarly decrements it when when through. Any writer will
+ * run only when the count of readers is 0. That is because it blocks on that
+ * semaphore (doing a COND_WAIT) until it gets control of it, which won't
+ * happen unless the count becomes 0. ALL readers and other writers are then
+ * blocked until it releases the semaphore. The reader whose unlocking causes
+ * the count to become 0 signals any waiting writers, and the system guarantees
+ * that only one gets control at a time */
+
+# define PERL_READ_LOCK(mutex) \
+ STMT_START { \
+ MUTEX_LOCK(&(mutex)->lock); \
+ (mutex)->readers_count++; \
+ MUTEX_UNLOCK(&(mutex)->lock); \
+ } STMT_END
+
+# define PERL_READ_UNLOCK(mutex) \
+ STMT_START { \
+ MUTEX_LOCK(&(mutex)->lock); \
+ (mutex)->readers_count--; \
+ if ((mutex)->readers_count <= 0) { \
+ assert((mutex)->readers_count == 0); \
+ COND_SIGNAL(&(mutex)->wakeup); \
+ (mutex)->readers_count = 0; \
+ } \
+ MUTEX_UNLOCK(&(mutex)->lock); \
+ } STMT_END
+
+# define PERL_WRITE_LOCK(mutex) \
+ STMT_START { \
+ MUTEX_LOCK(&(mutex)->lock); \
+ do { \
+ if ((mutex)->readers_count <= 0) { \
+ assert((mutex)->readers_count == 0); \
+ (mutex)->readers_count = 0; \
+ break; \
+ } \
+ COND_WAIT(&(mutex)->wakeup, &(mutex)->lock); \
+ } \
+ while (1); \
+ \
+ /* Here, the mutex is locked, with no readers */ \
+ } STMT_END
+
+# define PERL_WRITE_UNLOCK(mutex) \
+ STMT_START { \
+ COND_SIGNAL(&(mutex)->wakeup); \
+ MUTEX_UNLOCK(&(mutex)->lock); \
+ } STMT_END
+
+# define PERL_RW_MUTEX_INIT(mutex) \
+ STMT_START { \
+ MUTEX_INIT(&(mutex)->lock); \
+ COND_INIT(&(mutex)->wakeup); \
+ (mutex)->readers_count = 0; \
+ } STMT_END
+
+# define PERL_RW_MUTEX_DESTROY(mutex) \
+ STMT_START { \
+ COND_DESTROY(&(mutex)->wakeup); \
+ MUTEX_DESTROY(&(mutex)->lock); \
+ } STMT_END
+
+#endif
+
/* DETACH(t) must only be called while holding t->mutex */
#ifndef DETACH
# define DETACH(t) \
STMT_START { \
- int _eC_; \
- if ((_eC_ = pthread_detach((t)->self))) { \
- MUTEX_UNLOCK(&(t)->mutex); \
- Perl_croak_nocontext("panic: DETACH (%d) [%s:%d]", \
- _eC_, __FILE__, __LINE__); \
- } \
+ int _eC_; \
+ if ((_eC_ = pthread_detach((t)->self))) { \
+ MUTEX_UNLOCK(&(t)->mutex); \
+ Perl_croak_nocontext("panic: DETACH (%d) [%s:%d]", \
+ _eC_, __FILE__, __LINE__); \
+ } \
} STMT_END
#endif /* DETACH */
#ifndef JOIN
# define JOIN(t, avp) \
STMT_START { \
- int _eC_; \
- if ((_eC_ = pthread_join((t)->self, (void**)(avp)))) \
- Perl_croak_nocontext("panic: pthread_join (%d) [%s:%d]", \
- _eC_, __FILE__, __LINE__); \
+ int _eC_; \
+ if ((_eC_ = pthread_join((t)->self, (void**)(avp)))) \
+ Perl_croak_nocontext("panic: pthread_join (%d) [%s:%d]", \
+ _eC_, __FILE__, __LINE__); \
} STMT_END
#endif /* JOIN */
@@ -321,10 +386,10 @@
#ifndef PERL_SET_CONTEXT
# define PERL_SET_CONTEXT(t) \
STMT_START { \
- int _eC_; \
- if ((_eC_ = pthread_setspecific(PL_thr_key, (void *)(t)))) \
- Perl_croak_nocontext("panic: pthread_setspecific (%d) [%s:%d]", \
- _eC_, __FILE__, __LINE__); \
+ int _eC_; \
+ if ((_eC_ = pthread_setspecific(PL_thr_key, (void *)(t)))) \
+ Perl_croak_nocontext("panic: pthread_setspecific (%d) [%s:%d]", \
+ _eC_, __FILE__, __LINE__); \
} STMT_END
#endif /* PERL_SET_CONTEXT */
@@ -337,33 +402,32 @@
#ifndef ALLOC_THREAD_KEY
# define ALLOC_THREAD_KEY \
STMT_START { \
- if (pthread_key_create(&PL_thr_key, 0)) { \
+ if (pthread_key_create(&PL_thr_key, 0)) { \
PERL_UNUSED_RESULT(write(2, STR_WITH_LEN("panic: pthread_key_create failed\n"))); \
- exit(1); \
- } \
+ exit(1); \
+ } \
} STMT_END
#endif
#ifndef FREE_THREAD_KEY
# define FREE_THREAD_KEY \
STMT_START { \
- pthread_key_delete(PL_thr_key); \
+ pthread_key_delete(PL_thr_key); \
} STMT_END
#endif
#ifndef PTHREAD_ATFORK
# ifdef HAS_PTHREAD_ATFORK
# define PTHREAD_ATFORK(prepare,parent,child) \
- pthread_atfork(prepare,parent,child)
+ pthread_atfork(prepare,parent,child)
# else
# define PTHREAD_ATFORK(prepare,parent,child) \
- NOOP
+ NOOP
# endif
#endif
#ifndef THREAD_RET_TYPE
# define THREAD_RET_TYPE void *
-# define THREAD_RET_CAST(p) ((void *)(p))
#endif /* THREAD_RET */
# define LOCK_DOLLARZERO_MUTEX MUTEX_LOCK(&PL_dollarzero_mutex)
@@ -407,6 +471,15 @@
# define COND_DESTROY(c) NOOP
#endif
+#ifndef PERL_READ_LOCK
+# define PERL_READ_LOCK NOOP
+# define PERL_READ_UNLOCK NOOP
+# define PERL_WRITE_LOCK NOOP
+# define PERL_WRITE_UNLOCK NOOP
+# define PERL_RW_MUTEX_INIT NOOP
+# define PERL_RW_MUTEX_DESTROY NOOP
+#endif
+
#ifndef LOCK_DOLLARZERO_MUTEX
# define LOCK_DOLLARZERO_MUTEX NOOP
#endif
diff --git a/Master/tlpkg/tlperl/lib/CORE/time64.h b/Master/tlpkg/tlperl/lib/CORE/time64.h
index b86e7716020..8064ae7cf1a 100644
--- a/Master/tlpkg/tlperl/lib/CORE/time64.h
+++ b/Master/tlpkg/tlperl/lib/CORE/time64.h
@@ -28,15 +28,7 @@ struct TM64 {
#endif
#ifdef HAS_TM_TM_ZONE
-/* If glibc is defined or we are on QNX, use const.
- * Otherwise, if we are on android, use const but
- * not with g++.
- */
-# if defined(__GLIBC__) || (defined(__ANDROID__) && !defined(__cplusplus)) \
- || defined(__QNX__) || defined(__CYGWIN__)
- const
-# endif
- char *tm_zone;
+ const char *tm_zone;
#endif
};
diff --git a/Master/tlpkg/tlperl/lib/CORE/time64_config.h b/Master/tlpkg/tlperl/lib/CORE/time64_config.h
index 0bebebb53c0..8a8dbef6dd7 100644
--- a/Master/tlpkg/tlperl/lib/CORE/time64_config.h
+++ b/Master/tlpkg/tlperl/lib/CORE/time64_config.h
@@ -1,6 +1,8 @@
#ifndef PERL_TIME64_CONFIG_H_
# define PERL_TIME64_CONFIG_H_
+#include "reentr.h"
+
/* Configuration
-------------
Define as appropriate for your system.
diff --git a/Master/tlpkg/tlperl/lib/CORE/uconfig.h b/Master/tlpkg/tlperl/lib/CORE/uconfig.h
index 7d3db32309a..68df40f6051 100644
--- a/Master/tlpkg/tlperl/lib/CORE/uconfig.h
+++ b/Master/tlpkg/tlperl/lib/CORE/uconfig.h
@@ -220,7 +220,7 @@
/* HAS_MBLEN:
* This symbol, if defined, indicates that the mblen routine is available
- * to find the number of bytes in a multibye character.
+ * to find the number of bytes in a multibyte character.
*/
/*#define HAS_MBLEN / **/
@@ -1229,8 +1229,8 @@
* This symbol contains the ~name expanded version of ARCHLIB, to be used
* in programs that are not prepared to deal with ~ expansion at run-time.
*/
-/*#define ARCHLIB "/usr/local/lib/perl5/5.32/unknown" / **/
-/*#define ARCHLIB_EXP "/usr/local/lib/perl5/5.32/unknown" / **/
+/*#define ARCHLIB "/usr/local/lib/perl5/5.34/unknown" / **/
+/*#define ARCHLIB_EXP "/usr/local/lib/perl5/5.34/unknown" / **/
/* BIN:
* This symbol holds the path of the bin directory where the package will
@@ -1283,8 +1283,8 @@
* This symbol contains the ~name expanded version of PRIVLIB, to be used
* in programs that are not prepared to deal with ~ expansion at run-time.
*/
-#define PRIVLIB "/usr/local/lib/perl5/5.32" /**/
-#define PRIVLIB_EXP "/usr/local/lib/perl5/5.32" /**/
+#define PRIVLIB "/usr/local/lib/perl5/5.34" /**/
+#define PRIVLIB_EXP "/usr/local/lib/perl5/5.34" /**/
/* SITEARCH:
* This symbol contains the name of the private library for this package.
@@ -1301,8 +1301,8 @@
* This symbol contains the ~name expanded version of SITEARCH, to be used
* in programs that are not prepared to deal with ~ expansion at run-time.
*/
-/*#define SITEARCH "/usr/local/lib/perl5/5.32/unknown" / **/
-/*#define SITEARCH_EXP "/usr/local/lib/perl5/5.32/unknown" / **/
+/*#define SITEARCH "/usr/local/lib/perl5/5.34/unknown" / **/
+/*#define SITEARCH_EXP "/usr/local/lib/perl5/5.34/unknown" / **/
/* SITELIB:
* This symbol contains the name of the private library for this package.
@@ -1324,8 +1324,8 @@
* removed. The elements in inc_version_list (inc_version_list.U) can
* be tacked onto this variable to generate a list of directories to search.
*/
-#define SITELIB "/usr/local/lib/perl5/5.32" /**/
-#define SITELIB_EXP "/usr/local/lib/perl5/5.32" /**/
+#define SITELIB "/usr/local/lib/perl5/5.34" /**/
+#define SITELIB_EXP "/usr/local/lib/perl5/5.34" /**/
#define SITELIB_STEM "/usr/local/lib/perl5" /**/
/* PERL_VENDORARCH:
@@ -1732,6 +1732,8 @@
* LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE
* LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_BE
* LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_LE
+ * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN
+ * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN
* LONG_DOUBLE_IS_VAX_H_FLOAT
* LONG_DOUBLE_IS_UNKNOWN_FORMAT
* It is only defined if the system supports long doubles.
@@ -1969,11 +1971,11 @@
* This symbol, if defined, indicates that the union semun is
* defined by including <sys/sem.h>. If not, the user code
* probably needs to define it as:
- * union semun {
+ * union semun {
* int val;
* struct semid_ds *buf;
* unsigned short *array;
- * }
+ * }
*/
/* USE_SEMCTL_SEMUN:
* This symbol, if defined, indicates that union semun is
@@ -2984,7 +2986,7 @@
/* HAS_MEMMEM:
* This symbol, if defined, indicates that the memmem routine is
- * available to return a pointer to the start of the first occurance
+ * available to return a pointer to the start of the first occurrence
* of a substring in a memory area (or NULL if not found).
* In glibc, memmem is a GNU extension. The function is visible in
* libc, but the prototype is only visible if _GNU_SOURCE is #defined.
@@ -4212,6 +4214,12 @@
*/
/*#define USE_C_BACKTRACE / **/
+/* USE_STRICT_BY_DEFAULT:
+ * This symbol, if defined, enables additional defaults.
+ * At this time it only enables implicit strict by default.
+ */
+/*#define USE_STRICT_BY_DEFAULT / * use strict by default */
+
/* USE_DTRACE:
* This symbol, if defined, indicates that Perl should
* be built with support for DTrace.
@@ -4532,6 +4540,19 @@
/*#define HAS_ENDSERVENT_R / **/
#define ENDSERVENT_R_PROTO 0 /**/
+/* GETENV_PRESERVES_OTHER_THREAD:
+ * This symbol, if defined, indicates that the getenv system call doesn't
+ * zap the static buffer of getenv() in a different thread.
+ *
+ * The typical getenv() implementation will return a pointer to the proper
+ * position in **environ. But some may instead copy them to a static
+ * buffer in getenv(). If there is a per-thread instance of that buffer,
+ * or the return points to **environ, then a many-reader/1-writer mutex
+ * will work; otherwise an exclusive locking mutex is required to prevent
+ * races.
+ */
+#define GETENV_PRESERVES_OTHER_THREAD /**/
+
/* HAS_GETGRENT_R:
* This symbol, if defined, indicates that the getgrent_r routine
* is available to getgrent re-entrantly.
@@ -4828,6 +4849,9 @@
#define L_R_TZSET
#endif
+/* L_R_TZSET:
+ * If localtime_r() needs tzset, it is defined in this define
+ */
/* LOCALTIME_R_PROTO:
* This symbol encodes the prototype of localtime_r.
* It is zero if d_localtime_r is undef, and one of the
@@ -5119,10 +5143,11 @@
* This symbol, if defined, indicates that Perl should be built to
* use the interpreter-based threading implementation.
*/
-/* USE_5005THREADS:
- * This symbol, if defined, indicates that Perl should be built to
- * use the 5.005-based threading implementation.
- * Only valid up to 5.8.x.
+/* USE_THREADS:
+ * This symbol, if defined, indicates that Perl should
+ * be built to use threads. At present, it is a synonym for
+ * and USE_ITHREADS, but eventually the source ought to be
+ * changed to use this to mean _any_ threading implementation.
*/
/* OLD_PTHREADS_API:
* This symbol, if defined, indicates that Perl should
@@ -5133,11 +5158,8 @@
* try to use the various _r versions of library functions.
* This is extremely experimental.
*/
-/*#define USE_5005THREADS / **/
/*#define USE_ITHREADS / **/
-#if defined(USE_5005THREADS) && !defined(USE_ITHREADS)
-#define USE_THREADS /* until src is revised*/
-#endif
+/*#define USE_THREADS / **/
/*#define OLD_PTHREADS_API / **/
/*#define USE_REENTRANT_API / **/
@@ -5260,6 +5282,6 @@
#endif
/* Generated from:
- * 14796a77fb4ae3335f5e589a98445bc6e838b688194f6f112537495f0814f5d5 config_h.SH
- * 6e8898de349ca5bd5102aa12be91e6884110157cb9267e661f6fc797bbd54649 uconfig.sh
+ * 6edd641b187b02d0daa8cb53f5d22f2dcca115a0d3e744f51b0292d2db484ca5 config_h.SH
+ * a9ec40c778a205e0256475b5ef025389f7ea06d75d09ac92414f6b99839577e8 uconfig.sh
* ex: set ro: */
diff --git a/Master/tlpkg/tlperl/lib/CORE/uni_keywords.h b/Master/tlpkg/tlperl/lib/CORE/uni_keywords.h
index a36d8bc4488..c0851645671 100644
--- a/Master/tlpkg/tlperl/lib/CORE/uni_keywords.h
+++ b/Master/tlpkg/tlperl/lib/CORE/uni_keywords.h
@@ -4,6 +4,9 @@
* Any changes made here will be lost!
*/
+
+#if defined(PERL_CORE) || defined(PERL_EXT_RE_BUILD)
+
#define MPH_VALt I16
/*
@@ -7488,6 +7491,8 @@ MPH_VALt match_uniprop( const unsigned char * const key, const U16 key_len ) {
return 0;
}
+#endif /* #if defined(PERL_CORE) || defined(PERL_EXT_RE_BUILD) */
+
/* Generated from:
* d60b1a3dffe16c4aaaf3f00d21993bb320d05e9828b106182214764d4c69935c lib/Unicode/UCD.pm
* ce96627d4fc91b4fd886c409caeb9b76cf7bd345e12f05c6701add7f233f6437 lib/unicore/ArabicShaping.txt
@@ -7537,10 +7542,10 @@ MPH_VALt match_uniprop( const unsigned char * const key, const U16 key_len ) {
* baba9dfc133e3cb770a89aaf0973b1341fa61c2da6c176baf6428898b3b568d8 lib/unicore/extracted/DLineBreak.txt
* 6d4a8c945dd7db83ed617cbb7d937de7f4ecf016ff22970d846e996a7c9a2a5d lib/unicore/extracted/DNumType.txt
* 5b7c14380d5cceeaffcfbc18db1ed936391d2af2d51f5a41f1a17b692c77e59b lib/unicore/extracted/DNumValues.txt
- * ee0dd174fd5b158d82dfea95d7d822ca0bfcd490182669353dca3ab39a8ee807 lib/unicore/mktables
+ * 28076ceb3f4e2514ea9db243f4b918b9a7c2807b036237e2276b99b2659d9474 lib/unicore/mktables
* 50b85a67451145545a65cea370dab8d3444fbfe07e9c34cef560c5b7da9d3eef lib/unicore/version
- * 2680b9254eb236c5c090f11b149605043e8c8433661b96efc4a42fb4709342a5 regen/charset_translations.pl
- * 6bbad21de0848e0236b02f34f5fa0edd3cdae9ba8173cc9469a5513936b9e728 regen/mk_PL_charclass.pl
- * 7a7e778e903508b1c244a77bae57ec57606ab775bb5f81719dbb122eb66d4259 regen/mk_invlists.pl
+ * 24120d5e0c9685c442c93bc1dbea9b85ef973bf8e9474baf0e55b160c288226b regen/charset_translations.pl
+ * 9f74e34278592ddf58fef8c32236b294e94ea5e12627f911f4563e8040a07292 regen/mk_PL_charclass.pl
+ * 5eb9e6c825496cc9aa705e3cd33bc6d5a9657dcca16d4c4acc4824ff30b34a26 regen/mk_invlists.pl
* cf1d68efb7d919d302c4005641eae8d36da6d7850816ad374b0c00b45e609f43 regen/mph.pl
* ex: set ro: */
diff --git a/Master/tlpkg/tlperl/lib/CORE/unicode_constants.h b/Master/tlpkg/tlperl/lib/CORE/unicode_constants.h
index b85b0fcd5a6..eea66f6ba4f 100755
--- a/Master/tlpkg/tlperl/lib/CORE/unicode_constants.h
+++ b/Master/tlpkg/tlperl/lib/CORE/unicode_constants.h
@@ -22,7 +22,7 @@
* with no additional suffix are both string constants */
/*
-=head1 Unicode Support
+=for apidoc_section $unicode
=for apidoc AmnU|const char *|BOM_UTF8
@@ -82,12 +82,16 @@ bytes.
# define VT_NATIVE 0x0B /* U+000B */
# define ESC_NATIVE 0x1B /* U+001B */
# define LATIN_SMALL_LETTER_SHARP_S_NATIVE 0xDF /* U+00DF */
+# define LATIN_SMALL_LETTER_SHARP_S_UTF8 "\xC3\x9F" /* U+00DF */
# define LATIN_SMALL_LETTER_A_WITH_RING_ABOVE_NATIVE 0xE5 /* U+00E5 */
# define LATIN_CAPITAL_LETTER_A_WITH_RING_ABOVE_NATIVE 0xC5 /* U+00C5 */
# define LATIN_SMALL_LETTER_Y_WITH_DIAERESIS_NATIVE 0xFF /* U+00FF */
# define MICRO_SIGN_NATIVE 0xB5 /* U+00B5 */
-# define MAX_PRINT_A_FOR_USE_ONLY_BY_REGCOMP_DOT_C 0x7E /* The max code point that isPRINT_A */
+# define MICRO_SIGN_UTF8 "\xC2\xB5" /* U+00B5 */
+# ifdef PERL_IN_REGCOMP_C
+# define MAX_PRINT_A 0x7E /* The max code point that isPRINT_A */
+# endif
#endif /* ASCII/Latin1 */
#if 'A' == 193 /* EBCDIC 1047 */ \
@@ -125,12 +129,16 @@ bytes.
# define VT_NATIVE 0x0B /* U+000B */
# define ESC_NATIVE 0x27 /* U+001B */
# define LATIN_SMALL_LETTER_SHARP_S_NATIVE 0x59 /* U+00DF */
+# define LATIN_SMALL_LETTER_SHARP_S_UTF8 "\x8A\x73" /* U+00DF */
# define LATIN_SMALL_LETTER_A_WITH_RING_ABOVE_NATIVE 0x47 /* U+00E5 */
# define LATIN_CAPITAL_LETTER_A_WITH_RING_ABOVE_NATIVE 0x67 /* U+00C5 */
# define LATIN_SMALL_LETTER_Y_WITH_DIAERESIS_NATIVE 0xDF /* U+00FF */
# define MICRO_SIGN_NATIVE 0xA0 /* U+00B5 */
-# define MAX_PRINT_A_FOR_USE_ONLY_BY_REGCOMP_DOT_C 0xF9 /* The max code point that isPRINT_A */
+# define MICRO_SIGN_UTF8 "\x80\x64" /* U+00B5 */
+# ifdef PERL_IN_REGCOMP_C
+# define MAX_PRINT_A 0xF9 /* The max code point that isPRINT_A */
+# endif
#endif /* EBCDIC 1047 */
#if 'A' == 193 /* EBCDIC 037 */ \
@@ -168,19 +176,27 @@ bytes.
# define VT_NATIVE 0x0B /* U+000B */
# define ESC_NATIVE 0x27 /* U+001B */
# define LATIN_SMALL_LETTER_SHARP_S_NATIVE 0x59 /* U+00DF */
+# define LATIN_SMALL_LETTER_SHARP_S_UTF8 "\x80\x72" /* U+00DF */
# define LATIN_SMALL_LETTER_A_WITH_RING_ABOVE_NATIVE 0x47 /* U+00E5 */
# define LATIN_CAPITAL_LETTER_A_WITH_RING_ABOVE_NATIVE 0x67 /* U+00C5 */
# define LATIN_SMALL_LETTER_Y_WITH_DIAERESIS_NATIVE 0xDF /* U+00FF */
# define MICRO_SIGN_NATIVE 0xA0 /* U+00B5 */
-# define MAX_PRINT_A_FOR_USE_ONLY_BY_REGCOMP_DOT_C 0xF9 /* The max code point that isPRINT_A */
+# define MICRO_SIGN_UTF8 "\x78\x63" /* U+00B5 */
+# ifdef PERL_IN_REGCOMP_C
+# define MAX_PRINT_A 0xF9 /* The max code point that isPRINT_A */
+# endif
#endif /* EBCDIC 037 */
/* The number of code points not matching \pC */
-#define NON_OTHER_COUNT_FOR_USE_ONLY_BY_REGCOMP_DOT_C 143698
+#ifdef PERL_IN_REGCOMP_C
+# define NON_OTHER_COUNT 143698
+#endif
/* The highest code point that has any type of case change */
-#define HIGHEST_CASE_CHANGING_CP_FOR_USE_ONLY_BY_UTF8_DOT_C 0x1E943
+#ifdef PERL_IN_UTF8_C
+# define HIGHEST_CASE_CHANGING_CP 0x1E943
+#endif
#endif /* PERL_UNICODE_CONSTANTS_H_ */
diff --git a/Master/tlpkg/tlperl/lib/CORE/unixish.h b/Master/tlpkg/tlperl/lib/CORE/unixish.h
index 5bf5b93690b..eafc6f1e8b8 100644
--- a/Master/tlpkg/tlperl/lib/CORE/unixish.h
+++ b/Master/tlpkg/tlperl/lib/CORE/unixish.h
@@ -137,7 +137,7 @@ int afstat(int fd, struct stat *statb);
#if defined(__amigaos4__)
# define PERL_SYS_INIT_BODY(c,v) \
- MALLOC_CHECK_TAINT2(*c,*v) PERL_FPU_INIT; PERLIO_INIT; MALLOC_INIT; amigaos4_init_fork_array(); amigaos4_init_environ_sema();
+ MALLOC_CHECK_TAINT2(*c,*v) PERL_FPU_INIT; PERLIO_INIT; MALLOC_INIT; amigaos4_init_fork_array(); amigaos4_init_environ_sema();
# define PERL_SYS_TERM_BODY() \
HINTS_REFCNT_TERM; KEYWORD_PLUGIN_MUTEX_TERM; \
OP_CHECK_MUTEX_TERM; OP_REFCNT_TERM; PERLIO_TERM; \
@@ -148,7 +148,7 @@ int afstat(int fd, struct stat *statb);
#ifndef PERL_SYS_INIT_BODY
# define PERL_SYS_INIT_BODY(c,v) \
- MALLOC_CHECK_TAINT2(*c,*v) PERL_FPU_INIT; PERLIO_INIT; MALLOC_INIT
+ MALLOC_CHECK_TAINT2(*c,*v) PERL_FPU_INIT; PERLIO_INIT; MALLOC_INIT
#endif
#ifndef PERL_SYS_TERM_BODY
diff --git a/Master/tlpkg/tlperl/lib/CORE/utf8.h b/Master/tlpkg/tlperl/lib/CORE/utf8.h
index 01bf447a614..3bec01989f9 100644
--- a/Master/tlpkg/tlperl/lib/CORE/utf8.h
+++ b/Master/tlpkg/tlperl/lib/CORE/utf8.h
@@ -35,14 +35,6 @@
#define FOLD_FLAGS_NOMIX_ASCII 0x4
/*
-=head1 Unicode Support
-L<perlguts/Unicode Support> has an introduction to this API.
-
-See also L</Character classification>,
-and L</Character case changing>.
-Various functions outside this section also work specially with Unicode.
-Search for the string "utf8" in this document.
-
=for apidoc is_ascii_string
This is a misleadingly-named synonym for L</is_utf8_invariant_string>.
@@ -78,7 +70,7 @@ the string is invariant.
#define to_uni_fold(c, p, lenp) _to_uni_fold_flags(c, p, lenp, FOLD_FLAGS_FULL)
#define foldEQ_utf8(s1, pe1, l1, u1, s2, pe2, l2, u2) \
- foldEQ_utf8_flags(s1, pe1, l1, u1, s2, pe2, l2, u2, 0)
+ foldEQ_utf8_flags(s1, pe1, l1, u1, s2, pe2, l2, u2, 0)
#define FOLDEQ_UTF8_NOMIX_ASCII (1 << 0)
#define FOLDEQ_LOCALE (1 << 1)
#define FOLDEQ_S1_ALREADY_FOLDED (1 << 2)
@@ -86,9 +78,6 @@ the string is invariant.
#define FOLDEQ_S1_FOLDS_SANE (1 << 4)
#define FOLDEQ_S2_FOLDS_SANE (1 << 5)
-#define ibcmp_utf8(s1, pe1, l1, u1, s2, pe2, l2, u2) \
- cBOOL(! foldEQ_utf8(s1, pe1, l1, u1, s2, pe2, l2, u2))
-
#ifdef EBCDIC
/* The equivalent of these macros but implementing UTF-EBCDIC
are in the following header file:
@@ -283,7 +272,7 @@ are in the character. */
/* 2**UTF_ACCUMULATION_SHIFT - 1. This masks out all but the bits that carry
* real information in a continuation byte. This turns out to be 0x3F in
* UTF-8, 0x1F in UTF-EBCDIC. */
-#define UTF_CONTINUATION_MASK ((U8) ((1U << UTF_ACCUMULATION_SHIFT) - 1))
+#define UTF_CONTINUATION_MASK ((U8) (nBIT_MASK(UTF_ACCUMULATION_SHIFT)))
/* For use in UTF8_IS_CONTINUATION(). This turns out to be 0xC0 in UTF-8,
* E0 in UTF-EBCDIC */
@@ -353,7 +342,9 @@ C<cp> is Unicode if above 255; otherwise is platform-native.
* ASCII platforms, everything is representable by 7 bytes */
#if defined(UV_IS_QUAD) || defined(EBCDIC)
# define __BASE_UNI_SKIP(uv) (__COMMON_UNI_SKIP(uv) \
- (UV) (uv) < ((UV) 1U << (6 * UTF_ACCUMULATION_SHIFT)) ? 7 : UTF8_MAXBYTES)
+ LIKELY((UV) (uv) < ((UV) 1U << (6 * UTF_ACCUMULATION_SHIFT))) \
+ ? 7 \
+ : UTF8_MAXBYTES)
#else
# define __BASE_UNI_SKIP(uv) (__COMMON_UNI_SKIP(uv) 7)
#endif
@@ -417,7 +408,7 @@ encoded as UTF-8. C<cp> is a native (ASCII or EBCDIC) code point if less than
/* The largest code point representable by two UTF-8 bytes on any platform that
* Perl runs on. This value is constrained by EBCDIC which has 5 bits per
* continuation byte */
-#define MAX_PORTABLE_UTF8_TWO_BYTE (32 * (1U << 5) - 1)
+#define MAX_PORTABLE_UTF8_TWO_BYTE (32 * nBIT_UMAX(5))
/*
@@ -461,12 +452,14 @@ uppercase/lowercase/titlecase/fold into.
* UTF-8 encoded character that mark it as a start byte and give the number of
* bytes that comprise the character. 'len' is the number of bytes in the
* multi-byte sequence. */
-#define UTF_START_MARK(len) (((len) > 7) ? 0xFF : ((U8) (0xFE << (7-(len)))))
+#define UTF_START_MARK(len) (UNLIKELY((len) > 7) \
+ ? 0xFF \
+ : ((U8) (0xFE << (7-(len)))))
/* Masks out the initial one bits in a start byte, leaving the real data ones.
* Doesn't work on an invariant byte. 'len' is the number of bytes in the
* multi-byte sequence that comprises the character. */
-#define UTF_START_MASK(len) (((len) >= 7) ? 0x00 : (0x1F >> ((len)-2)))
+#define UTF_START_MASK(len) (UNLIKELY((len) >= 7) ? 0x00 : (0x1F >> ((len)-2)))
/* Adds a UTF8 continuation byte 'new' of information to a running total code
* point 'old' of all the continuation bytes so far. This is designed to be
@@ -538,16 +531,16 @@ If there is a possibility of malformed input, use instead:
=over
-=item L</C<UTF8_SAFE_SKIP>> if you know the maximum ending pointer in the
+=item C<L</UTF8_SAFE_SKIP>> if you know the maximum ending pointer in the
buffer pointed to by C<s>; or
-=item L</C<UTF8_CHK_SKIP>> if you don't know it.
+=item C<L</UTF8_CHK_SKIP>> if you don't know it.
=back
It is better to restructure your code so the end pointer is passed down so that
you know what it actually is at the point of this call, but if that isn't
-possible, L</C<UTF8_CHK_SKIP>> can minimize the chance of accessing beyond the end
+possible, C<L</UTF8_CHK_SKIP>> can minimize the chance of accessing beyond the end
of the input buffer.
=cut
@@ -556,7 +549,7 @@ of the input buffer.
/*
=for apidoc Am|STRLEN|UTF8_SKIP|char* s
-This is a synonym for L</C<UTF8SKIP>>
+This is a synonym for C<L</UTF8SKIP>>
=cut
*/
@@ -566,8 +559,8 @@ This is a synonym for L</C<UTF8SKIP>>
/*
=for apidoc Am|STRLEN|UTF8_CHK_SKIP|char* s
-This is a safer version of L</C<UTF8SKIP>>, but still not as safe as
-L</C<UTF8_SAFE_SKIP>>. This version doesn't blindly assume that the input
+This is a safer version of C<L</UTF8SKIP>>, but still not as safe as
+C<L</UTF8_SAFE_SKIP>>. This version doesn't blindly assume that the input
string pointed to by C<s> is well-formed, but verifies that there isn't a NUL
terminating character before the expected end of the next character in C<s>.
The length C<UTF8_CHK_SKIP> returns stops just before any such NUL.
@@ -578,13 +571,13 @@ beyond the end of the input buffer, even if it is malformed UTF-8.
This macro is intended to be used by XS modules where the inputs could be
malformed, and it isn't feasible to restructure to use the safer
-L</C<UTF8_SAFE_SKIP>>, for example when interfacing with a C library.
+C<L</UTF8_SAFE_SKIP>>, for example when interfacing with a C library.
=cut
*/
#define UTF8_CHK_SKIP(s) \
- (s[0] == '\0' ? 1 : MIN(UTF8SKIP(s), \
+ (UNLIKELY(s[0] == '\0') ? 1 : MIN(UTF8SKIP(s), \
my_strnlen((char *) (s), UTF8SKIP(s))))
/*
@@ -596,7 +589,7 @@ returns beyond C<e>. On DEBUGGING builds, it asserts that S<C<s E<lt>= e>>.
=cut
*/
#define UTF8_SAFE_SKIP(s, e) (__ASSERT_((e) >= (s)) \
- ((e) - (s)) <= 0 \
+ UNLIKELY(((e) - (s)) <= 0) \
? 0 \
: MIN(((e) - (s)), UTF8_SKIP(s)))
@@ -727,7 +720,7 @@ case any call to string overloading updates the internal UTF-8 encoding flag.
* within 'use bytes'. UTF-8 locales are not tested for here, but perhaps
* could be */
#define IN_UNI_8_BIT \
- (( ( (CopHINTS_get(PL_curcop) & HINT_UNI_8_BIT)) \
+ (( ( (CopHINTS_get(PL_curcop) & HINT_UNI_8_BIT)) \
|| ( CopHINTS_get(PL_curcop) & HINT_LOCALE_PARTIAL \
/* -1 below is for :not_characters */ \
&& _is_in_locale_category(FALSE, -1))) \
@@ -875,17 +868,18 @@ fit in an IV on the current machine.
*/
#ifdef EBCDIC
# define UTF8_IS_SUPER(s, e) \
- (( LIKELY((e) > (s) + 4) \
- && NATIVE_UTF8_TO_I8(*(s)) >= 0xF9 \
- && ( NATIVE_UTF8_TO_I8(*(s)) > 0xF9 \
- || (NATIVE_UTF8_TO_I8(*((s) + 1)) >= 0xA2)) \
- && LIKELY((s) + UTF8SKIP(s) <= (e))) \
- ? is_utf8_char_helper(s, s + UTF8SKIP(s), 0) : 0)
+ (( ((e) > (s) + 4) \
+ && (NATIVE_UTF8_TO_I8(*(s)) >= 0xF9) \
+ && UNLIKELY( NATIVE_UTF8_TO_I8(*(s)) > 0xF9 \
+ || (NATIVE_UTF8_TO_I8(*((s) + 1)) >= 0xA2)) \
+ && LIKELY((s) + UTF8SKIP(s) <= (e))) \
+ ? is_utf8_char_helper(s, s + UTF8SKIP(s), 0) : 0)
#else
# define UTF8_IS_SUPER(s, e) \
- (( LIKELY((e) > (s) + 3) \
+ (( ((e) > (s) + 3) \
&& (*(U8*) (s)) >= 0xF4 \
- && ((*(U8*) (s)) > 0xF4 || (*((U8*) (s) + 1) >= 0x90))\
+ && (UNLIKELY( ((*(U8*) (s)) > 0xF4) \
+ || (*((U8*) (s) + 1) >= 0x90))) \
&& LIKELY((s) + UTF8SKIP(s) <= (e))) \
? is_utf8_char_helper(s, s + UTF8SKIP(s), 0) : 0)
#endif
@@ -958,28 +952,29 @@ Evaluates to 0xFFFD, the code point of the Unicode REPLACEMENT CHARACTER
/* This matches the 2048 code points between UNICODE_SURROGATE_FIRST (0xD800) and
* UNICODE_SURROGATE_LAST (0xDFFF) */
-#define UNICODE_IS_SURROGATE(uv) (((UV) (uv) & (~0xFFFF | 0xF800)) \
+#define UNICODE_IS_SURROGATE(uv) UNLIKELY(((UV) (uv) & (~0xFFFF | 0xF800)) \
== 0xD800)
-#define UNICODE_IS_REPLACEMENT(uv) ((UV) (uv) == UNICODE_REPLACEMENT)
-#define UNICODE_IS_BYTE_ORDER_MARK(uv) ((UV) (uv) == UNICODE_BYTE_ORDER_MARK)
+#define UNICODE_IS_REPLACEMENT(uv) UNLIKELY((UV) (uv) == UNICODE_REPLACEMENT)
+#define UNICODE_IS_BYTE_ORDER_MARK(uv) UNLIKELY((UV) (uv) \
+ == UNICODE_BYTE_ORDER_MARK)
/* Is 'uv' one of the 32 contiguous-range noncharacters? */
-#define UNICODE_IS_32_CONTIGUOUS_NONCHARS(uv) ((UV) (uv) >= 0xFDD0 \
- && (UV) (uv) <= 0xFDEF)
+#define UNICODE_IS_32_CONTIGUOUS_NONCHARS(uv) UNLIKELY((UV) (uv) >= 0xFDD0 \
+ && (UV) (uv) <= 0xFDEF)
/* Is 'uv' one of the 34 plane-ending noncharacters 0xFFFE, 0xFFFF, 0x1FFFE,
* 0x1FFFF, ... 0x10FFFE, 0x10FFFF, given that we know that 'uv' is not above
* the Unicode legal max */
#define UNICODE_IS_END_PLANE_NONCHAR_GIVEN_NOT_SUPER(uv) \
- (((UV) (uv) & 0xFFFE) == 0xFFFE)
+ UNLIKELY(((UV) (uv) & 0xFFFE) == 0xFFFE)
#define UNICODE_IS_NONCHAR(uv) \
( UNICODE_IS_32_CONTIGUOUS_NONCHARS(uv) \
|| ( LIKELY( ! UNICODE_IS_SUPER(uv)) \
&& UNICODE_IS_END_PLANE_NONCHAR_GIVEN_NOT_SUPER(uv)))
-#define UNICODE_IS_SUPER(uv) ((UV) (uv) > PERL_UNICODE_MAX)
+#define UNICODE_IS_SUPER(uv) UNLIKELY((UV) (uv) > PERL_UNICODE_MAX)
#define LATIN_SMALL_LETTER_SHARP_S LATIN_SMALL_LETTER_SHARP_S_NATIVE
#define LATIN_SMALL_LETTER_Y_WITH_DIAERESIS \
@@ -1018,13 +1013,7 @@ Evaluates to 0xFFFD, the code point of the Unicode REPLACEMENT CHARACTER
/* Character classes could also allow \b, but not patterns in general */
#define UNI_DISPLAY_REGEX (UNI_DISPLAY_ISPRINT|UNI_DISPLAY_BACKSLASH)
-#define ANYOF_FOLD_SHARP_S(node, input, end) \
- (ANYOF_BITMAP_TEST(node, LATIN_SMALL_LETTER_SHARP_S) && \
- (ANYOF_NONBITMAP(node)) && \
- (ANYOF_FLAGS(node) & ANYOF_LOC_NONBITMAP_FOLD) && \
- ((end) > (input) + 1) && \
- isALPHA_FOLD_EQ((input)[0], 's'))
-
+/* Should be removed; maybe deprecated, but not used in CPAN */
#define SHARP_S_SKIP 2
#define is_utf8_char_buf(buf, buf_end) isUTF8_CHAR(buf, buf_end)
diff --git a/Master/tlpkg/tlperl/lib/CORE/utfebcdic.h b/Master/tlpkg/tlperl/lib/CORE/utfebcdic.h
index 97b8f7001a5..ce9981b427b 100644
--- a/Master/tlpkg/tlperl/lib/CORE/utfebcdic.h
+++ b/Master/tlpkg/tlperl/lib/CORE/utfebcdic.h
@@ -242,7 +242,7 @@ explicitly forbidden, and the shortest possible encoding should always be used
#if '^' == 95 /* CP 1047 */
/* UTF8_CHAR: Matches legal UTF-EBCDIC variant code points up through 0x1FFFFFF
- 0xA0 - 0x1FFFFF
+ 0xA0 - 0x1FFFFF
*/
/*** GENERATED CODE ***/
@@ -264,11 +264,11 @@ explicitly forbidden, and the shortest possible encoding should always be used
/*** GENERATED CODE ***/
#define is_STRICT_UTF8_CHAR_utf8_no_length_checks_part0(s) \
( ( ( 0x41 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x72 ) ) ?\
- ( LIKELY( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ) ? 4 : 0 )\
+ ( LIKELY( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ) ? 4 : 0 )\
: ( 0x73 == ((const U8*)s)[1] ) ? \
- ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) ?\
- ( LIKELY( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ? 4 : 0 )\
- : LIKELY( ( 0x73 == ((const U8*)s)[2] ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFE ) == 0x70 ) ) ? 4 : 0 )\
+ ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) ?\
+ ( LIKELY( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ? 4 : 0 )\
+ : LIKELY( ( 0x73 == ((const U8*)s)[2] ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFE ) == 0x70 ) ) ? 4 : 0 )\
: 0 )
@@ -276,27 +276,27 @@ explicitly forbidden, and the shortest possible encoding should always be used
#define is_STRICT_UTF8_CHAR_utf8_no_length_checks_part1(s) \
( ( 0xED == ((const U8*)s)[0] ) ? \
( ( ( ( ((const U8*)s)[1] & 0xEF ) == 0x49 ) || ( ( ((const U8*)s)[1] & 0xF9 ) == 0x51 ) || ((const U8*)s)[1] == 0x63 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x65 ) || ((const U8*)s)[1] == 0x69 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x70 ) ) ?\
- ( LIKELY( ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFC ) == 0x70 ) ) ? 5 : 0 )\
+ ( LIKELY( ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFC ) == 0x70 ) ) ? 5 : 0 )\
: ( ((const U8*)s)[1] == 0x4A || ((const U8*)s)[1] == 0x52 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x54 ) || ((const U8*)s)[1] == 0x58 || ((const U8*)s)[1] == 0x62 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x64 ) || ( ( ((const U8*)s)[1] & 0xFD ) == 0x68 ) || ( ( ((const U8*)s)[1] & 0xFD ) == 0x71 ) ) ?\
- ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) ?\
- ( LIKELY( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFC ) == 0x70 ) ) ? 5 : 0 )\
- : ( 0x73 == ((const U8*)s)[2] ) ? \
- ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ?\
- ( LIKELY( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFC ) == 0x70 ) ? 5 : 0 )\
- : LIKELY( ( 0x73 == ((const U8*)s)[3] ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFE ) == 0x70 ) ) ? 5 : 0 )\
- : 0 ) \
+ ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) ?\
+ ( LIKELY( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFC ) == 0x70 ) ) ? 5 : 0 )\
+ : ( 0x73 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ?\
+ ( LIKELY( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFC ) == 0x70 ) ? 5 : 0 )\
+ : LIKELY( ( 0x73 == ((const U8*)s)[3] ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFE ) == 0x70 ) ) ? 5 : 0 )\
+ : 0 ) \
: 0 ) \
: ( 0xEE == ((const U8*)s)[0] ) ? \
( ( 0x41 == ((const U8*)s)[1] ) ? \
- ( LIKELY( ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFC ) == 0x70 ) ) ? 5 : 0 )\
+ ( LIKELY( ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFC ) == 0x70 ) ) ? 5 : 0 )\
: ( 0x42 == ((const U8*)s)[1] ) ? \
- ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) ?\
- ( LIKELY( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFC ) == 0x70 ) ) ? 5 : 0 )\
- : ( 0x73 == ((const U8*)s)[2] ) ? \
- ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ?\
- ( LIKELY( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFC ) == 0x70 ) ? 5 : 0 )\
- : LIKELY( ( 0x73 == ((const U8*)s)[3] ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFE ) == 0x70 ) ) ? 5 : 0 )\
- : 0 ) \
+ ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) ?\
+ ( LIKELY( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFC ) == 0x70 ) ) ? 5 : 0 )\
+ : ( 0x73 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ?\
+ ( LIKELY( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFC ) == 0x70 ) ? 5 : 0 )\
+ : LIKELY( ( 0x73 == ((const U8*)s)[3] ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFE ) == 0x70 ) ) ? 5 : 0 )\
+ : 0 ) \
: 0 ) \
: 0 )
@@ -311,15 +311,15 @@ explicitly forbidden, and the shortest possible encoding should always be used
( LIKELY( ( ( ( 0x57 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x6A ) || ( ((const U8*)s)[1] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFC ) == 0x70 ) ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ) ? 4 : 0 )\
: ( 0xDD == ((const U8*)s)[0] ) ? \
( ( ( 0x41 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x64 ) || ( 0x67 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x72 ) ) ?\
- ( LIKELY( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ) ? 4 : 0 )\
+ ( LIKELY( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ) ? 4 : 0 )\
: ( 0x73 == ((const U8*)s)[1] ) ? \
- ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x54 ) || ( 0x57 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) ?\
- ( LIKELY( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ? 4 : 0 )\
- : ( 0x55 == ((const U8*)s)[2] ) ? \
- ( LIKELY( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x56 ) ) ? 4 : 0 )\
- : ( 0x56 == ((const U8*)s)[2] ) ? \
- ( LIKELY( ( 0x57 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ? 4 : 0 )\
- : LIKELY( ( 0x73 == ((const U8*)s)[2] ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFE ) == 0x70 ) ) ? 4 : 0 )\
+ ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x54 ) || ( 0x57 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) ?\
+ ( LIKELY( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ? 4 : 0 )\
+ : ( 0x55 == ((const U8*)s)[2] ) ? \
+ ( LIKELY( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x56 ) ) ? 4 : 0 )\
+ : ( 0x56 == ((const U8*)s)[2] ) ? \
+ ( LIKELY( ( 0x57 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ? 4 : 0 )\
+ : LIKELY( ( 0x73 == ((const U8*)s)[2] ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFE ) == 0x70 ) ) ? 4 : 0 )\
: 0 ) \
: ( 0xDE == ((const U8*)s)[0] || 0xE1 == ((const U8*)s)[0] || 0xEB == ((const U8*)s)[0] ) ? \
( LIKELY( ( ( ( 0x41 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x6A ) || ( ((const U8*)s)[1] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFC ) == 0x70 ) ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ) ? 4 : 0 )\
@@ -327,8 +327,8 @@ explicitly forbidden, and the shortest possible encoding should always be used
/* C9_STRICT_UTF8_CHAR: Matches legal Unicode UTF-8 variant code points
including non-character code points, no surrogates
- 0x00A0 - 0xD7FF
- 0xE000 - 0x10FFFF
+ 0x00A0 - 0xD7FF
+ 0xE000 - 0x10FFFF
*/
/*** GENERATED CODE ***/
#define is_C9_STRICT_UTF8_CHAR_utf8_no_length_checks(s) \
@@ -368,15 +368,15 @@ explicitly forbidden, and the shortest possible encoding should always be used
/*** GENERATED CODE ***/
#define is_STRICT_UTF8_CHAR_utf8_no_length_checks_part0(s) \
( ( ( ( ((const U8*)s)[1] & 0xEF ) == 0x49 ) || ( ( ((const U8*)s)[1] & 0xF9 ) == 0x51 ) || ((const U8*)s)[1] == 0x62 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x64 ) || ( ( ((const U8*)s)[1] & 0xFD ) == 0x68 ) || ((const U8*)s)[1] == 0x71 ) ?\
- ( ( ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x72 ) ) ) ? 5 : 0 )\
+ ( ( ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x72 ) ) ) ? 5 : 0 )\
: ( ((const U8*)s)[1] == 0x4A || ((const U8*)s)[1] == 0x52 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x54 ) || ((const U8*)s)[1] == 0x58 || ((const U8*)s)[1] == 0x5F || ((const U8*)s)[1] == 0x63 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x65 ) || ((const U8*)s)[1] == 0x69 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x70 ) ) ?\
- ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFE ) == 0x70 ) ?\
- ( ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x72 ) ) ) ? 5 : 0 )\
- : ( 0x72 == ((const U8*)s)[2] ) ? \
- ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFE ) == 0x70 ) ?\
- ( ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x72 ) ) ? 5 : 0 )\
- : ( ( 0x72 == ((const U8*)s)[3] ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || 0x70 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
- : 0 ) \
+ ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFE ) == 0x70 ) ?\
+ ( ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x72 ) ) ) ? 5 : 0 )\
+ : ( 0x72 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFE ) == 0x70 ) ?\
+ ( ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x72 ) ) ? 5 : 0 )\
+ : ( ( 0x72 == ((const U8*)s)[3] ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || 0x70 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
+ : 0 ) \
: 0 )
@@ -384,15 +384,15 @@ explicitly forbidden, and the shortest possible encoding should always be used
#define is_STRICT_UTF8_CHAR_utf8_no_length_checks_part1(s) \
( ( 0xEE == ((const U8*)s)[0] ) ? \
( ( 0x41 == ((const U8*)s)[1] ) ? \
- ( ( ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x72 ) ) ) ? 5 : 0 )\
+ ( ( ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x72 ) ) ) ? 5 : 0 )\
: ( 0x42 == ((const U8*)s)[1] ) ? \
- ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFE ) == 0x70 ) ?\
- ( ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x72 ) ) ) ? 5 : 0 )\
- : ( 0x72 == ((const U8*)s)[2] ) ? \
- ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFE ) == 0x70 ) ?\
- ( ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x72 ) ) ? 5 : 0 )\
- : ( ( 0x72 == ((const U8*)s)[3] ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || 0x70 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
- : 0 ) \
+ ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFE ) == 0x70 ) ?\
+ ( ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x72 ) ) ) ? 5 : 0 )\
+ : ( 0x72 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFE ) == 0x70 ) ?\
+ ( ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x72 ) ) ? 5 : 0 )\
+ : ( ( 0x72 == ((const U8*)s)[3] ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || 0x70 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
+ : 0 ) \
: 0 ) \
: 0 )
@@ -406,25 +406,25 @@ explicitly forbidden, and the shortest possible encoding should always be used
#define is_STRICT_UTF8_CHAR_utf8_no_length_checks_part3(s) \
( ( 0xDD == ((const U8*)s)[0] ) ? \
( ( ( 0x41 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x59 ) || 0x5F == ((const U8*)s)[1] || ( ((const U8*)s)[1] & 0xFE ) == 0x62 || ( 0x66 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x6A ) || ( ((const U8*)s)[1] & 0xFE ) == 0x70 ) ?\
- ( ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ) ? 4 : 0 )\
+ ( ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ) ? 4 : 0 )\
: ( 0x72 == ((const U8*)s)[1] ) ? \
- ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x54 ) || ( 0x57 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFE ) == 0x70 ) ?\
- ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ? 4 : 0 )\
- : ( 0x55 == ((const U8*)s)[2] ) ? \
- ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x56 ) ) ? 4 : 0 )\
- : ( 0x56 == ((const U8*)s)[2] ) ? \
- ( ( ( 0x57 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ? 4 : 0 )\
- : ( ( 0x72 == ((const U8*)s)[2] ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || 0x70 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
+ ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x54 ) || ( 0x57 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFE ) == 0x70 ) ?\
+ ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ? 4 : 0 )\
+ : ( 0x55 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x56 ) ) ? 4 : 0 )\
+ : ( 0x56 == ((const U8*)s)[2] ) ? \
+ ( ( ( 0x57 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ? 4 : 0 )\
+ : ( ( 0x72 == ((const U8*)s)[2] ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || 0x70 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
: 0 ) \
: ( 0xDE == ((const U8*)s)[0] || 0xE1 == ((const U8*)s)[0] || 0xEB == ((const U8*)s)[0] ) ?\
( ( ( ( ( 0x41 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x59 ) || 0x5F == ((const U8*)s)[1] || ( 0x62 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x72 ) ) && ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ) ? 4 : 0 )\
: ( 0xDF == ((const U8*)s)[0] || 0xEA == ((const U8*)s)[0] || 0xEC == ((const U8*)s)[0] ) ?\
( ( ( 0x41 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x59 ) || 0x5F == ((const U8*)s)[1] || ( 0x62 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x6A ) || ( ((const U8*)s)[1] & 0xFE ) == 0x70 ) ?\
- ( ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ) ? 4 : 0 )\
+ ( ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ) ? 4 : 0 )\
: ( 0x72 == ((const U8*)s)[1] ) ? \
- ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFE ) == 0x70 ) ?\
- ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ? 4 : 0 )\
- : ( ( 0x72 == ((const U8*)s)[2] ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || 0x70 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
+ ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFE ) == 0x70 ) ?\
+ ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ? 4 : 0 )\
+ : ( ( 0x72 == ((const U8*)s)[2] ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || 0x70 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
: 0 ) \
: ( 0xED == ((const U8*)s)[0] ) ? is_STRICT_UTF8_CHAR_utf8_no_length_checks_part0(s) : is_STRICT_UTF8_CHAR_utf8_no_length_checks_part1(s) )
@@ -439,8 +439,8 @@ explicitly forbidden, and the shortest possible encoding should always be used
/* C9_STRICT_UTF8_CHAR: Matches legal Unicode UTF-8 variant code points
including non-character code points, no surrogates
- 0x00A0 - 0xD7FF
- 0xE000 - 0x10FFFF
+ 0x00A0 - 0xD7FF
+ 0xE000 - 0x10FFFF
*/
/*** GENERATED CODE ***/
#define is_C9_STRICT_UTF8_CHAR_utf8_no_length_checks_part0(s) \
diff --git a/Master/tlpkg/tlperl/lib/CORE/util.h b/Master/tlpkg/tlperl/lib/CORE/util.h
index 6294e590b8f..b2e0b7797b5 100644
--- a/Master/tlpkg/tlperl/lib/CORE/util.h
+++ b/Master/tlpkg/tlperl/lib/CORE/util.h
@@ -14,30 +14,30 @@
#ifdef VMS
# define PERL_FILE_IS_ABSOLUTE(f) \
- (*(f) == '/' \
- || (strchr(f,':') \
- || ((*(f) == '[' || *(f) == '<') \
- && (isWORDCHAR((f)[1]) || memCHRs("$-_]>",(f)[1])))))
+ (*(f) == '/' \
+ || (strchr(f,':') \
+ || ((*(f) == '[' || *(f) == '<') \
+ && (isWORDCHAR((f)[1]) || memCHRs("$-_]>",(f)[1])))))
#elif defined(WIN32) || defined(__CYGWIN__)
# define PERL_FILE_IS_ABSOLUTE(f) \
- (*(f) == '/' || *(f) == '\\' /* UNC/rooted path */ \
- || ((f)[0] && (f)[1] == ':')) /* drive name */
+ (*(f) == '/' || *(f) == '\\' /* UNC/rooted path */ \
+ || ((f)[0] && (f)[1] == ':')) /* drive name */
#elif defined(NETWARE)
# define PERL_FILE_IS_ABSOLUTE(f) \
- (((f)[0] && (f)[1] == ':') /* drive name */ \
- || ((f)[0] == '\\' && (f)[1] == '\\') /* UNC path */ \
- || ((f)[3] == ':')) /* volume name, currently only sys */
-#elif defined(DOSISH) || defined(__SYMBIAN32__)
+ (((f)[0] && (f)[1] == ':') /* drive name */ \
+ || ((f)[0] == '\\' && (f)[1] == '\\') /* UNC path */ \
+ || ((f)[3] == ':')) /* volume name, currently only sys */
+#elif defined(DOSISH)
# define PERL_FILE_IS_ABSOLUTE(f) \
- (*(f) == '/' \
- || ((f)[0] && (f)[1] == ':')) /* drive name */
-#else /* NEITHER DOSISH NOR SYMBIANISH */
+ (*(f) == '/' \
+ || ((f)[0] && (f)[1] == ':')) /* drive name */
+#else /* NOT DOSISH */
# define PERL_FILE_IS_ABSOLUTE(f) (*(f) == '/')
#endif
/*
-=head1 Miscellaneous Functions
+=for apidoc_section $string
=for apidoc ibcmp
@@ -47,10 +47,16 @@ This is a synonym for S<C<(! foldEQ())>>
This is a synonym for S<C<(! foldEQ_locale())>>
+=for apidoc ibcmp_utf8
+
+This is a synonym for S<C<(! foldEQ_utf8())>>
+
=cut
*/
#define ibcmp(s1, s2, len) cBOOL(! foldEQ(s1, s2, len))
#define ibcmp_locale(s1, s2, len) cBOOL(! foldEQ_locale(s1, s2, len))
+#define ibcmp_utf8(s1, pe1, l1, u1, s2, pe2, l2, u2) \
+ cBOOL(! foldEQ_utf8(s1, pe1, l1, u1, s2, pe2, l2, u2))
/* outside the core, perl.h undefs HAS_QUAD if IV isn't 64-bit
We can't swap this to HAS_QUAD, because the logic here affects the type of
@@ -242,7 +248,7 @@ returning NULL if not found. The terminating NUL bytes are not compared.
*/
-#define instr(haystack, needle) strstr(haystack, needle)
+#define instr(haystack, needle) strstr((char *) haystack, (char *) needle)
#ifdef HAS_MEMMEM
# define ninstr(big, bigend, little, lend) \
diff --git a/Master/tlpkg/tlperl/lib/CORE/uudmap.h b/Master/tlpkg/tlperl/lib/CORE/uudmap.h
index 41341665dd2..b03566e0a7e 100644
--- a/Master/tlpkg/tlperl/lib/CORE/uudmap.h
+++ b/Master/tlpkg/tlperl/lib/CORE/uudmap.h
@@ -1,3 +1,8 @@
+/* ..\uudmap.h:
+ * THIS FILE IS AUTO-GENERATED DURING THE BUILD by: ..\generate_uudmap.exe
+ *
+ * These values will populate PL_uumap[], as used by unpack('u')
+*/
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
diff --git a/Master/tlpkg/tlperl/lib/CORE/vdir.h b/Master/tlpkg/tlperl/lib/CORE/vdir.h
index c21ec7c400a..f06830af41a 100644
--- a/Master/tlpkg/tlperl/lib/CORE/vdir.h
+++ b/Master/tlpkg/tlperl/lib/CORE/vdir.h
@@ -34,25 +34,25 @@ public:
inline char* GetCurrentDirectoryA(int dwBufSize, char *lpBuffer)
{
- char* ptr = dirTableA[nDefault];
- while (--dwBufSize)
- {
- if ((*lpBuffer++ = *ptr++) == '\0')
- break;
- }
+ char* ptr = dirTableA[nDefault];
+ while (--dwBufSize)
+ {
+ if ((*lpBuffer++ = *ptr++) == '\0')
+ break;
+ }
*lpBuffer = '\0';
- return /* unused */ NULL;
+ return /* unused */ NULL;
};
inline WCHAR* GetCurrentDirectoryW(int dwBufSize, WCHAR *lpBuffer)
{
- WCHAR* ptr = dirTableW[nDefault];
- while (--dwBufSize)
- {
- if ((*lpBuffer++ = *ptr++) == '\0')
- break;
- }
+ WCHAR* ptr = dirTableW[nDefault];
+ while (--dwBufSize)
+ {
+ if ((*lpBuffer++ = *ptr++) == '\0')
+ break;
+ }
*lpBuffer = '\0';
- return /* unused */ NULL;
+ return /* unused */ NULL;
};
DWORD CalculateEnvironmentSpace(void);
@@ -66,54 +66,54 @@ protected:
inline const char *GetDefaultDirA(void)
{
- return dirTableA[nDefault];
+ return dirTableA[nDefault];
};
inline void SetDefaultDirA(char const *pPath, int index)
{
- SetDirA(pPath, index);
- nDefault = index;
+ SetDirA(pPath, index);
+ nDefault = index;
};
inline const WCHAR *GetDefaultDirW(void)
{
- return dirTableW[nDefault];
+ return dirTableW[nDefault];
};
inline void SetDefaultDirW(WCHAR const *pPath, int index)
{
- SetDirW(pPath, index);
- nDefault = index;
+ SetDirW(pPath, index);
+ nDefault = index;
};
inline const char *GetDirA(int index)
{
- char *ptr = dirTableA[index];
- if (!ptr) {
- /* simulate the existence of this drive */
- ptr = szLocalBufferA;
- ptr[0] = 'A' + index;
- ptr[1] = ':';
- ptr[2] = '\\';
- ptr[3] = 0;
- }
- return ptr;
+ char *ptr = dirTableA[index];
+ if (!ptr) {
+ /* simulate the existence of this drive */
+ ptr = szLocalBufferA;
+ ptr[0] = 'A' + index;
+ ptr[1] = ':';
+ ptr[2] = '\\';
+ ptr[3] = 0;
+ }
+ return ptr;
};
inline const WCHAR *GetDirW(int index)
{
- WCHAR *ptr = dirTableW[index];
- if (!ptr) {
- /* simulate the existence of this drive */
- ptr = szLocalBufferW;
- ptr[0] = 'A' + index;
- ptr[1] = ':';
- ptr[2] = '\\';
- ptr[3] = 0;
- }
- return ptr;
+ WCHAR *ptr = dirTableW[index];
+ if (!ptr) {
+ /* simulate the existence of this drive */
+ ptr = szLocalBufferW;
+ ptr[0] = 'A' + index;
+ ptr[1] = ':';
+ ptr[2] = '\\';
+ ptr[3] = 0;
+ }
+ return ptr;
};
inline int DriveIndex(char chr)
{
- if (chr == '\\' || chr == '/')
- return ('Z'-'A')+1;
- return (chr | 0x20)-'a';
+ if (chr == '\\' || chr == '/')
+ return ('Z'-'A')+1;
+ return (chr | 0x20)-'a';
};
VMem *pMem;
@@ -139,16 +139,16 @@ void VDir::Init(VDir* pDir, VMem *p)
pMem = p;
if (pDir) {
- for (index = 0; index < driveCount; ++index) {
- SetDirW(pDir->GetDirW(index), index);
- }
- nDefault = pDir->GetDefault();
+ for (index = 0; index < driveCount; ++index) {
+ SetDirW(pDir->GetDirW(index), index);
+ }
+ nDefault = pDir->GetDefault();
}
else {
- int bSave = bManageDirectory;
- DWORD driveBits = GetLogicalDrives();
+ int bSave = bManageDirectory;
+ DWORD driveBits = GetLogicalDrives();
- bManageDirectory = 0;
+ bManageDirectory = 0;
WCHAR szBuffer[MAX_PATH*driveCount];
if (GetLogicalDriveStringsW(sizeof(szBuffer), szBuffer)) {
WCHAR* pEnv = GetEnvironmentStringsW();
@@ -162,7 +162,7 @@ void VDir::Init(VDir* pDir, VMem *p)
FreeEnvironmentStringsW(pEnv);
}
SetDefaultW(L".");
- bManageDirectory = bSave;
+ bManageDirectory = bSave;
}
}
@@ -172,30 +172,30 @@ int VDir::SetDirA(char const *pPath, int index)
int length = 0;
WCHAR wBuffer[MAX_PATH+1];
if (index < driveCount && pPath != NULL) {
- length = strlen(pPath);
- pMem->Free(dirTableA[index]);
- ptr = dirTableA[index] = (char*)pMem->Malloc(length+2);
- if (ptr != NULL) {
- strcpy(ptr, pPath);
- ptr += length-1;
- chr = *ptr++;
- if (chr != '\\' && chr != '/') {
- *ptr++ = '\\';
- *ptr = '\0';
- }
- MultiByteToWideChar(CP_ACP, 0, dirTableA[index], -1,
- wBuffer, (sizeof(wBuffer)/sizeof(WCHAR)));
- length = wcslen(wBuffer);
- pMem->Free(dirTableW[index]);
- dirTableW[index] = (WCHAR*)pMem->Malloc((length+1)*2);
- if (dirTableW[index] != NULL) {
- wcscpy(dirTableW[index], wBuffer);
- }
- }
+ length = strlen(pPath);
+ pMem->Free(dirTableA[index]);
+ ptr = dirTableA[index] = (char*)pMem->Malloc(length+2);
+ if (ptr != NULL) {
+ strcpy(ptr, pPath);
+ ptr += length-1;
+ chr = *ptr++;
+ if (chr != '\\' && chr != '/') {
+ *ptr++ = '\\';
+ *ptr = '\0';
+ }
+ MultiByteToWideChar(CP_ACP, 0, dirTableA[index], -1,
+ wBuffer, (sizeof(wBuffer)/sizeof(WCHAR)));
+ length = wcslen(wBuffer);
+ pMem->Free(dirTableW[index]);
+ dirTableW[index] = (WCHAR*)pMem->Malloc((length+1)*2);
+ if (dirTableW[index] != NULL) {
+ wcscpy(dirTableW[index], wBuffer);
+ }
+ }
}
if(bManageDirectory)
- ::SetCurrentDirectoryA(pPath);
+ ::SetCurrentDirectoryA(pPath);
return length;
}
@@ -203,26 +203,26 @@ int VDir::SetDirA(char const *pPath, int index)
void VDir::FromEnvA(char *pEnv, int index)
{ /* gets the directory for index from the environment variable. */
while (*pEnv != '\0') {
- if ((pEnv[0] == '=') && (DriveIndex(pEnv[1]) == index)
+ if ((pEnv[0] == '=') && (DriveIndex(pEnv[1]) == index)
&& pEnv[2] == ':' && pEnv[3] == '=') {
- SetDirA(&pEnv[4], index);
- break;
- }
- else
- pEnv += strlen(pEnv)+1;
+ SetDirA(&pEnv[4], index);
+ break;
+ }
+ else
+ pEnv += strlen(pEnv)+1;
}
}
void VDir::FromEnvW(WCHAR *pEnv, int index)
{ /* gets the directory for index from the environment variable. */
while (*pEnv != '\0') {
- if ((pEnv[0] == '=') && (DriveIndex((char)pEnv[1]) == index)
+ if ((pEnv[0] == '=') && (DriveIndex((char)pEnv[1]) == index)
&& pEnv[2] == ':' && pEnv[3] == '=') {
- SetDirW(&pEnv[4], index);
- break;
- }
- else
- pEnv += wcslen(pEnv)+1;
+ SetDirW(&pEnv[4], index);
+ break;
+ }
+ else
+ pEnv += wcslen(pEnv)+1;
}
}
@@ -233,9 +233,9 @@ void VDir::SetDefaultA(char const *pDefault)
if (GetFullPathNameA(pDefault, sizeof(szBuffer), szBuffer, &pPtr)) {
if (*pDefault != '.' && pPtr != NULL)
- *pPtr = '\0';
+ *pPtr = '\0';
- SetDefaultDirA(szBuffer, DriveIndex(szBuffer[0]));
+ SetDefaultDirA(szBuffer, DriveIndex(szBuffer[0]));
}
}
@@ -244,31 +244,31 @@ int VDir::SetDirW(WCHAR const *pPath, int index)
WCHAR chr, *ptr;
int length = 0;
if (index < driveCount && pPath != NULL) {
- length = wcslen(pPath);
- pMem->Free(dirTableW[index]);
- ptr = dirTableW[index] = (WCHAR*)pMem->Malloc((length+2)*2);
- if (ptr != NULL) {
+ length = wcslen(pPath);
+ pMem->Free(dirTableW[index]);
+ ptr = dirTableW[index] = (WCHAR*)pMem->Malloc((length+2)*2);
+ if (ptr != NULL) {
char *ansi;
- wcscpy(ptr, pPath);
- ptr += length-1;
- chr = *ptr++;
- if (chr != '\\' && chr != '/') {
- *ptr++ = '\\';
- *ptr = '\0';
- }
+ wcscpy(ptr, pPath);
+ ptr += length-1;
+ chr = *ptr++;
+ if (chr != '\\' && chr != '/') {
+ *ptr++ = '\\';
+ *ptr = '\0';
+ }
ansi = win32_ansipath(dirTableW[index]);
- length = strlen(ansi);
- pMem->Free(dirTableA[index]);
- dirTableA[index] = (char*)pMem->Malloc(length+1);
- if (dirTableA[index] != NULL) {
- strcpy(dirTableA[index], ansi);
- }
+ length = strlen(ansi);
+ pMem->Free(dirTableA[index]);
+ dirTableA[index] = (char*)pMem->Malloc(length+1);
+ if (dirTableA[index] != NULL) {
+ strcpy(dirTableA[index], ansi);
+ }
win32_free(ansi);
- }
+ }
}
if(bManageDirectory)
- ::SetCurrentDirectoryW(pPath);
+ ::SetCurrentDirectoryW(pPath);
return length;
}
@@ -280,9 +280,9 @@ void VDir::SetDefaultW(WCHAR const *pDefault)
if (GetFullPathNameW(pDefault, (sizeof(szBuffer)/sizeof(WCHAR)), szBuffer, &pPtr)) {
if (*pDefault != '.' && pPtr != NULL)
- *pPtr = '\0';
+ *pPtr = '\0';
- SetDefaultDirW(szBuffer, DriveIndex((char)szBuffer[0]));
+ SetDefaultDirW(szBuffer, DriveIndex((char)szBuffer[0]));
}
}
@@ -314,69 +314,69 @@ inline bool IsSpecialFileName(const char* pName)
char ch = (pName[0] & ~0x20);
switch (ch)
{
- case 'A': /* AUX */
- if (((pName[1] & ~0x20) == 'U')
- && ((pName[2] & ~0x20) == 'X')
- && !pName[3])
- return true;
- break;
- case 'C': /* CLOCK$, COMx, CON, CONIN$ CONOUT$ */
- ch = (pName[1] & ~0x20);
- switch (ch)
- {
- case 'L': /* CLOCK$ */
- if (((pName[2] & ~0x20) == 'O')
- && ((pName[3] & ~0x20) == 'C')
- && ((pName[4] & ~0x20) == 'K')
- && (pName[5] == '$')
- && !pName[6])
- return true;
- break;
- case 'O': /* COMx, CON, CONIN$ CONOUT$ */
- if ((pName[2] & ~0x20) == 'M') {
- if ( inRANGE(pName[3], '1', '9')
- && !pName[4])
- return true;
- }
- else if ((pName[2] & ~0x20) == 'N') {
- if (!pName[3])
- return true;
- else if ((pName[3] & ~0x20) == 'I') {
- if (((pName[4] & ~0x20) == 'N')
- && (pName[5] == '$')
- && !pName[6])
- return true;
- }
- else if ((pName[3] & ~0x20) == 'O') {
- if (((pName[4] & ~0x20) == 'U')
- && ((pName[5] & ~0x20) == 'T')
- && (pName[6] == '$')
- && !pName[7])
- return true;
- }
- }
- break;
- }
- break;
- case 'L': /* LPTx */
- if (((pName[1] & ~0x20) == 'U')
- && ((pName[2] & ~0x20) == 'X')
- && inRANGE(pName[3], '1', '9')
- && !pName[4])
- return true;
- break;
- case 'N': /* NUL */
- if (((pName[1] & ~0x20) == 'U')
- && ((pName[2] & ~0x20) == 'L')
- && !pName[3])
- return true;
- break;
- case 'P': /* PRN */
- if (((pName[1] & ~0x20) == 'R')
- && ((pName[2] & ~0x20) == 'N')
- && !pName[3])
- return true;
- break;
+ case 'A': /* AUX */
+ if (((pName[1] & ~0x20) == 'U')
+ && ((pName[2] & ~0x20) == 'X')
+ && !pName[3])
+ return true;
+ break;
+ case 'C': /* CLOCK$, COMx, CON, CONIN$ CONOUT$ */
+ ch = (pName[1] & ~0x20);
+ switch (ch)
+ {
+ case 'L': /* CLOCK$ */
+ if (((pName[2] & ~0x20) == 'O')
+ && ((pName[3] & ~0x20) == 'C')
+ && ((pName[4] & ~0x20) == 'K')
+ && (pName[5] == '$')
+ && !pName[6])
+ return true;
+ break;
+ case 'O': /* COMx, CON, CONIN$ CONOUT$ */
+ if ((pName[2] & ~0x20) == 'M') {
+ if ( inRANGE(pName[3], '1', '9')
+ && !pName[4])
+ return true;
+ }
+ else if ((pName[2] & ~0x20) == 'N') {
+ if (!pName[3])
+ return true;
+ else if ((pName[3] & ~0x20) == 'I') {
+ if (((pName[4] & ~0x20) == 'N')
+ && (pName[5] == '$')
+ && !pName[6])
+ return true;
+ }
+ else if ((pName[3] & ~0x20) == 'O') {
+ if (((pName[4] & ~0x20) == 'U')
+ && ((pName[5] & ~0x20) == 'T')
+ && (pName[6] == '$')
+ && !pName[7])
+ return true;
+ }
+ }
+ break;
+ }
+ break;
+ case 'L': /* LPTx */
+ if (((pName[1] & ~0x20) == 'U')
+ && ((pName[2] & ~0x20) == 'X')
+ && inRANGE(pName[3], '1', '9')
+ && !pName[4])
+ return true;
+ break;
+ case 'N': /* NUL */
+ if (((pName[1] & ~0x20) == 'U')
+ && ((pName[2] & ~0x20) == 'L')
+ && !pName[3])
+ return true;
+ break;
+ case 'P': /* PRN */
+ if (((pName[1] & ~0x20) == 'R')
+ && ((pName[2] & ~0x20) == 'N')
+ && !pName[3])
+ return true;
+ break;
}
return false;
}
@@ -392,66 +392,66 @@ char *VDir::MapPathA(const char *pInName)
int length = strlen(pInName);
if (!length)
- return (char*)pInName;
+ return (char*)pInName;
if (length > MAX_PATH) {
- strncpy(szlBuf, pInName, MAX_PATH);
- if (IsPathSep(pInName[0]) && !IsPathSep(pInName[1])) {
- /* absolute path - reduce length by 2 for drive specifier */
- szlBuf[MAX_PATH-2] = '\0';
- }
- else
- szlBuf[MAX_PATH] = '\0';
- pInName = szlBuf;
+ strncpy(szlBuf, pInName, MAX_PATH);
+ if (IsPathSep(pInName[0]) && !IsPathSep(pInName[1])) {
+ /* absolute path - reduce length by 2 for drive specifier */
+ szlBuf[MAX_PATH-2] = '\0';
+ }
+ else
+ szlBuf[MAX_PATH] = '\0';
+ pInName = szlBuf;
}
/* strlen(pInName) is now <= MAX_PATH */
if (length > 1 && pInName[1] == ':') {
- /* has drive letter */
- if (length > 2 && IsPathSep(pInName[2])) {
- /* absolute with drive letter */
- DoGetFullPathNameA((char*)pInName, sizeof(szLocalBufferA), szLocalBufferA);
- }
- else {
- /* relative path with drive letter */
+ /* has drive letter */
+ if (length > 2 && IsPathSep(pInName[2])) {
+ /* absolute with drive letter */
+ DoGetFullPathNameA((char*)pInName, sizeof(szLocalBufferA), szLocalBufferA);
+ }
+ else {
+ /* relative path with drive letter */
driveIndex = DriveIndex(*pInName);
if (driveIndex < 0 || driveIndex >= driveLetterCount)
return (char *)pInName;
- strcpy(szBuffer, GetDirA(driveIndex));
- strcat(szBuffer, &pInName[2]);
- if(strlen(szBuffer) > MAX_PATH)
- szBuffer[MAX_PATH] = '\0';
+ strcpy(szBuffer, GetDirA(driveIndex));
+ strcat(szBuffer, &pInName[2]);
+ if(strlen(szBuffer) > MAX_PATH)
+ szBuffer[MAX_PATH] = '\0';
- DoGetFullPathNameA(szBuffer, sizeof(szLocalBufferA), szLocalBufferA);
- }
+ DoGetFullPathNameA(szBuffer, sizeof(szLocalBufferA), szLocalBufferA);
+ }
}
else {
- /* no drive letter */
- if (length > 1 && IsPathSep(pInName[1]) && IsPathSep(pInName[0])) {
- /* UNC name */
- DoGetFullPathNameA((char*)pInName, sizeof(szLocalBufferA), szLocalBufferA);
- }
- else {
- strcpy(szBuffer, GetDefaultDirA());
- if (IsPathSep(pInName[0])) {
- /* absolute path */
- strcpy(&szBuffer[2], pInName);
- DoGetFullPathNameA(szBuffer, sizeof(szLocalBufferA), szLocalBufferA);
- }
- else {
- /* relative path */
- if (IsSpecialFileName(pInName)) {
- return (char*)pInName;
- }
- else {
- strcat(szBuffer, pInName);
- if (strlen(szBuffer) > MAX_PATH)
- szBuffer[MAX_PATH] = '\0';
-
- DoGetFullPathNameA(szBuffer, sizeof(szLocalBufferA), szLocalBufferA);
- }
- }
- }
+ /* no drive letter */
+ if (length > 1 && IsPathSep(pInName[1]) && IsPathSep(pInName[0])) {
+ /* UNC name */
+ DoGetFullPathNameA((char*)pInName, sizeof(szLocalBufferA), szLocalBufferA);
+ }
+ else {
+ strcpy(szBuffer, GetDefaultDirA());
+ if (IsPathSep(pInName[0])) {
+ /* absolute path */
+ strcpy(&szBuffer[2], pInName);
+ DoGetFullPathNameA(szBuffer, sizeof(szLocalBufferA), szLocalBufferA);
+ }
+ else {
+ /* relative path */
+ if (IsSpecialFileName(pInName)) {
+ return (char*)pInName;
+ }
+ else {
+ strcat(szBuffer, pInName);
+ if (strlen(szBuffer) > MAX_PATH)
+ szBuffer[MAX_PATH] = '\0';
+
+ DoGetFullPathNameA(szBuffer, sizeof(szLocalBufferA), szLocalBufferA);
+ }
+ }
+ }
}
return szLocalBufferA;
@@ -465,17 +465,17 @@ int VDir::SetCurrentDirectoryA(char *lpBuffer)
pPtr = MapPathA(lpBuffer);
length = strlen(pPtr);
if(length > 3 && IsPathSep(pPtr[length-1])) {
- /* don't remove the trailing slash from 'x:\' */
- pPtr[length-1] = '\0';
+ /* don't remove the trailing slash from 'x:\' */
+ pPtr[length-1] = '\0';
}
DWORD r = GetFileAttributesA(pPtr);
if ((r != 0xffffffff) && (r & FILE_ATTRIBUTE_DIRECTORY))
{
- char szBuffer[(MAX_PATH+1)*2];
- DoGetFullPathNameA(pPtr, sizeof(szBuffer), szBuffer);
- SetDefaultDirA(szBuffer, DriveIndex(szBuffer[0]));
- nRet = 0;
+ char szBuffer[(MAX_PATH+1)*2];
+ DoGetFullPathNameA(pPtr, sizeof(szBuffer), szBuffer);
+ SetDefaultDirA(szBuffer, DriveIndex(szBuffer[0]));
+ nRet = 0;
}
return nRet;
@@ -486,9 +486,9 @@ DWORD VDir::CalculateEnvironmentSpace(void)
int index;
DWORD dwSize = 0;
for (index = 0; index < driveCount; ++index) {
- if (dirTableA[index] != NULL) {
- dwSize += strlen(dirTableA[index]) + 5; /* add 1 for trailing NULL and 4 for '=D:=' */
- }
+ if (dirTableA[index] != NULL) {
+ dwSize += strlen(dirTableA[index]) + 5; /* add 1 for trailing NULL and 4 for '=D:=' */
+ }
}
return dwSize;
}
@@ -498,22 +498,22 @@ LPSTR VDir::BuildEnvironmentSpace(LPSTR lpStr)
int index, length;
LPSTR lpDirStr;
for (index = 0; index < driveCount; ++index) {
- lpDirStr = dirTableA[index];
- if (lpDirStr != NULL) {
- lpStr[0] = '=';
- lpStr[1] = lpDirStr[0];
- lpStr[2] = '\0';
- CharUpper(&lpStr[1]);
- lpStr[2] = ':';
- lpStr[3] = '=';
- strcpy(&lpStr[4], lpDirStr);
- length = strlen(lpDirStr);
- lpStr += length + 5; /* add 1 for trailing NULL and 4 for '=D:=' */
- if (length > 3 && IsPathSep(lpStr[-2])) {
- lpStr[-2] = '\0'; /* remove the trailing path separator */
- --lpStr;
- }
- }
+ lpDirStr = dirTableA[index];
+ if (lpDirStr != NULL) {
+ lpStr[0] = '=';
+ lpStr[1] = lpDirStr[0];
+ lpStr[2] = '\0';
+ CharUpper(&lpStr[1]);
+ lpStr[2] = ':';
+ lpStr[3] = '=';
+ strcpy(&lpStr[4], lpDirStr);
+ length = strlen(lpDirStr);
+ lpStr += length + 5; /* add 1 for trailing NULL and 4 for '=D:=' */
+ if (length > 3 && IsPathSep(lpStr[-2])) {
+ lpStr[-2] = '\0'; /* remove the trailing path separator */
+ --lpStr;
+ }
+ }
}
return lpStr;
}
@@ -546,69 +546,69 @@ inline bool IsSpecialFileName(const WCHAR* pName)
WCHAR ch = (pName[0] & ~0x20);
switch (ch)
{
- case 'A': /* AUX */
- if (((pName[1] & ~0x20) == 'U')
- && ((pName[2] & ~0x20) == 'X')
- && !pName[3])
- return true;
- break;
- case 'C': /* CLOCK$, COMx, CON, CONIN$ CONOUT$ */
- ch = (pName[1] & ~0x20);
- switch (ch)
- {
- case 'L': /* CLOCK$ */
- if (((pName[2] & ~0x20) == 'O')
- && ((pName[3] & ~0x20) == 'C')
- && ((pName[4] & ~0x20) == 'K')
- && (pName[5] == '$')
- && !pName[6])
- return true;
- break;
- case 'O': /* COMx, CON, CONIN$ CONOUT$ */
- if ((pName[2] & ~0x20) == 'M') {
- if ( inRANGE(pName[3], '1', '9')
- && !pName[4])
- return true;
- }
- else if ((pName[2] & ~0x20) == 'N') {
- if (!pName[3])
- return true;
- else if ((pName[3] & ~0x20) == 'I') {
- if (((pName[4] & ~0x20) == 'N')
- && (pName[5] == '$')
- && !pName[6])
- return true;
- }
- else if ((pName[3] & ~0x20) == 'O') {
- if (((pName[4] & ~0x20) == 'U')
- && ((pName[5] & ~0x20) == 'T')
- && (pName[6] == '$')
- && !pName[7])
- return true;
- }
- }
- break;
- }
- break;
- case 'L': /* LPTx */
- if (((pName[1] & ~0x20) == 'U')
- && ((pName[2] & ~0x20) == 'X')
- && inRANGE(pName[3], '1', '9')
- && !pName[4])
- return true;
- break;
- case 'N': /* NUL */
- if (((pName[1] & ~0x20) == 'U')
- && ((pName[2] & ~0x20) == 'L')
- && !pName[3])
- return true;
- break;
- case 'P': /* PRN */
- if (((pName[1] & ~0x20) == 'R')
- && ((pName[2] & ~0x20) == 'N')
- && !pName[3])
- return true;
- break;
+ case 'A': /* AUX */
+ if (((pName[1] & ~0x20) == 'U')
+ && ((pName[2] & ~0x20) == 'X')
+ && !pName[3])
+ return true;
+ break;
+ case 'C': /* CLOCK$, COMx, CON, CONIN$ CONOUT$ */
+ ch = (pName[1] & ~0x20);
+ switch (ch)
+ {
+ case 'L': /* CLOCK$ */
+ if (((pName[2] & ~0x20) == 'O')
+ && ((pName[3] & ~0x20) == 'C')
+ && ((pName[4] & ~0x20) == 'K')
+ && (pName[5] == '$')
+ && !pName[6])
+ return true;
+ break;
+ case 'O': /* COMx, CON, CONIN$ CONOUT$ */
+ if ((pName[2] & ~0x20) == 'M') {
+ if ( inRANGE(pName[3], '1', '9')
+ && !pName[4])
+ return true;
+ }
+ else if ((pName[2] & ~0x20) == 'N') {
+ if (!pName[3])
+ return true;
+ else if ((pName[3] & ~0x20) == 'I') {
+ if (((pName[4] & ~0x20) == 'N')
+ && (pName[5] == '$')
+ && !pName[6])
+ return true;
+ }
+ else if ((pName[3] & ~0x20) == 'O') {
+ if (((pName[4] & ~0x20) == 'U')
+ && ((pName[5] & ~0x20) == 'T')
+ && (pName[6] == '$')
+ && !pName[7])
+ return true;
+ }
+ }
+ break;
+ }
+ break;
+ case 'L': /* LPTx */
+ if (((pName[1] & ~0x20) == 'U')
+ && ((pName[2] & ~0x20) == 'X')
+ && inRANGE(pName[3], '1', '9')
+ && !pName[4])
+ return true;
+ break;
+ case 'N': /* NUL */
+ if (((pName[1] & ~0x20) == 'U')
+ && ((pName[2] & ~0x20) == 'L')
+ && !pName[3])
+ return true;
+ break;
+ case 'P': /* PRN */
+ if (((pName[1] & ~0x20) == 'R')
+ && ((pName[2] & ~0x20) == 'N')
+ && !pName[3])
+ return true;
+ break;
}
return false;
}
@@ -624,66 +624,66 @@ WCHAR* VDir::MapPathW(const WCHAR *pInName)
int length = wcslen(pInName);
if (!length)
- return (WCHAR*)pInName;
+ return (WCHAR*)pInName;
if (length > MAX_PATH) {
- wcsncpy(szlBuf, pInName, MAX_PATH);
- if (IsPathSep(pInName[0]) && !IsPathSep(pInName[1])) {
- /* absolute path - reduce length by 2 for drive specifier */
- szlBuf[MAX_PATH-2] = '\0';
- }
- else
- szlBuf[MAX_PATH] = '\0';
- pInName = szlBuf;
+ wcsncpy(szlBuf, pInName, MAX_PATH);
+ if (IsPathSep(pInName[0]) && !IsPathSep(pInName[1])) {
+ /* absolute path - reduce length by 2 for drive specifier */
+ szlBuf[MAX_PATH-2] = '\0';
+ }
+ else
+ szlBuf[MAX_PATH] = '\0';
+ pInName = szlBuf;
}
/* strlen(pInName) is now <= MAX_PATH */
if (length > 1 && pInName[1] == ':') {
- /* has drive letter */
- if (IsPathSep(pInName[2])) {
- /* absolute with drive letter */
- DoGetFullPathNameW((WCHAR*)pInName, (sizeof(szLocalBufferW)/sizeof(WCHAR)), szLocalBufferW);
- }
- else {
- /* relative path with drive letter */
+ /* has drive letter */
+ if (IsPathSep(pInName[2])) {
+ /* absolute with drive letter */
+ DoGetFullPathNameW((WCHAR*)pInName, (sizeof(szLocalBufferW)/sizeof(WCHAR)), szLocalBufferW);
+ }
+ else {
+ /* relative path with drive letter */
driveIndex = DriveIndex(*pInName);
if (driveIndex < 0 || driveIndex >= driveLetterCount)
return (WCHAR *)pInName;
- wcscpy(szBuffer, GetDirW(driveIndex));
- wcscat(szBuffer, &pInName[2]);
- if(wcslen(szBuffer) > MAX_PATH)
- szBuffer[MAX_PATH] = '\0';
+ wcscpy(szBuffer, GetDirW(driveIndex));
+ wcscat(szBuffer, &pInName[2]);
+ if(wcslen(szBuffer) > MAX_PATH)
+ szBuffer[MAX_PATH] = '\0';
- DoGetFullPathNameW(szBuffer, (sizeof(szLocalBufferW)/sizeof(WCHAR)), szLocalBufferW);
- }
+ DoGetFullPathNameW(szBuffer, (sizeof(szLocalBufferW)/sizeof(WCHAR)), szLocalBufferW);
+ }
}
else {
- /* no drive letter */
- if (length > 1 && IsPathSep(pInName[1]) && IsPathSep(pInName[0])) {
- /* UNC name */
- DoGetFullPathNameW((WCHAR*)pInName, (sizeof(szLocalBufferW)/sizeof(WCHAR)), szLocalBufferW);
- }
- else {
- wcscpy(szBuffer, GetDefaultDirW());
- if (IsPathSep(pInName[0])) {
- /* absolute path */
- wcscpy(&szBuffer[2], pInName);
- DoGetFullPathNameW(szBuffer, (sizeof(szLocalBufferW)/sizeof(WCHAR)), szLocalBufferW);
- }
- else {
- /* relative path */
- if (IsSpecialFileName(pInName)) {
- return (WCHAR*)pInName;
- }
- else {
- wcscat(szBuffer, pInName);
- if (wcslen(szBuffer) > MAX_PATH)
- szBuffer[MAX_PATH] = '\0';
-
- DoGetFullPathNameW(szBuffer, (sizeof(szLocalBufferW)/sizeof(WCHAR)), szLocalBufferW);
- }
- }
- }
+ /* no drive letter */
+ if (length > 1 && IsPathSep(pInName[1]) && IsPathSep(pInName[0])) {
+ /* UNC name */
+ DoGetFullPathNameW((WCHAR*)pInName, (sizeof(szLocalBufferW)/sizeof(WCHAR)), szLocalBufferW);
+ }
+ else {
+ wcscpy(szBuffer, GetDefaultDirW());
+ if (IsPathSep(pInName[0])) {
+ /* absolute path */
+ wcscpy(&szBuffer[2], pInName);
+ DoGetFullPathNameW(szBuffer, (sizeof(szLocalBufferW)/sizeof(WCHAR)), szLocalBufferW);
+ }
+ else {
+ /* relative path */
+ if (IsSpecialFileName(pInName)) {
+ return (WCHAR*)pInName;
+ }
+ else {
+ wcscat(szBuffer, pInName);
+ if (wcslen(szBuffer) > MAX_PATH)
+ szBuffer[MAX_PATH] = '\0';
+
+ DoGetFullPathNameW(szBuffer, (sizeof(szLocalBufferW)/sizeof(WCHAR)), szLocalBufferW);
+ }
+ }
+ }
}
return szLocalBufferW;
}
@@ -696,17 +696,17 @@ int VDir::SetCurrentDirectoryW(WCHAR *lpBuffer)
pPtr = MapPathW(lpBuffer);
length = wcslen(pPtr);
if(length > 3 && IsPathSep(pPtr[length-1])) {
- /* don't remove the trailing slash from 'x:\' */
- pPtr[length-1] = '\0';
+ /* don't remove the trailing slash from 'x:\' */
+ pPtr[length-1] = '\0';
}
DWORD r = GetFileAttributesW(pPtr);
if ((r != 0xffffffff) && (r & FILE_ATTRIBUTE_DIRECTORY))
{
- WCHAR wBuffer[(MAX_PATH+1)*2];
- DoGetFullPathNameW(pPtr, (sizeof(wBuffer)/sizeof(WCHAR)), wBuffer);
- SetDefaultDirW(wBuffer, DriveIndex((char)wBuffer[0]));
- nRet = 0;
+ WCHAR wBuffer[(MAX_PATH+1)*2];
+ DoGetFullPathNameW(pPtr, (sizeof(wBuffer)/sizeof(WCHAR)), wBuffer);
+ SetDefaultDirW(wBuffer, DriveIndex((char)wBuffer[0]));
+ nRet = 0;
}
return nRet;
diff --git a/Master/tlpkg/tlperl/lib/CORE/vmem.h b/Master/tlpkg/tlperl/lib/CORE/vmem.h
index 3fd7e169fc4..bd765f68e22 100644
--- a/Master/tlpkg/tlperl/lib/CORE/vmem.h
+++ b/Master/tlpkg/tlperl/lib/CORE/vmem.h
@@ -93,26 +93,26 @@ public:
inline BOOL CreateOk(void)
{
- return TRUE;
+ return TRUE;
};
protected:
#ifdef _USE_LINKED_LIST
void LinkBlock(PMEMORY_BLOCK_HEADER ptr)
{
- PMEMORY_BLOCK_HEADER next = m_Dummy.pNext;
- m_Dummy.pNext = ptr;
- ptr->pPrev = &m_Dummy;
- ptr->pNext = next;
+ PMEMORY_BLOCK_HEADER next = m_Dummy.pNext;
+ m_Dummy.pNext = ptr;
+ ptr->pPrev = &m_Dummy;
+ ptr->pNext = next;
ptr->owner = this;
- next->pPrev = ptr;
+ next->pPrev = ptr;
}
void UnlinkBlock(PMEMORY_BLOCK_HEADER ptr)
{
- PMEMORY_BLOCK_HEADER next = ptr->pNext;
- PMEMORY_BLOCK_HEADER prev = ptr->pPrev;
- prev->pNext = next;
- next->pPrev = prev;
+ PMEMORY_BLOCK_HEADER next = ptr->pNext;
+ PMEMORY_BLOCK_HEADER prev = ptr->pPrev;
+ prev->pNext = next;
+ next->pPrev = prev;
}
MEMORY_BLOCK_HEADER m_Dummy;
@@ -136,7 +136,7 @@ VMem::~VMem(void)
{
#ifdef _USE_LINKED_LIST
while (m_Dummy.pNext != &m_Dummy) {
- Free(m_Dummy.pNext+1);
+ Free(m_Dummy.pNext+1);
}
DeleteCriticalSection(&m_cs);
#endif
@@ -148,8 +148,8 @@ void* VMem::Malloc(size_t size)
GetLock();
PMEMORY_BLOCK_HEADER ptr = (PMEMORY_BLOCK_HEADER)malloc(size+sizeof(MEMORY_BLOCK_HEADER));
if (!ptr) {
- FreeLock();
- return NULL;
+ FreeLock();
+ return NULL;
}
LinkBlock(ptr);
FreeLock();
@@ -163,11 +163,11 @@ void* VMem::Realloc(void* pMem, size_t size)
{
#ifdef _USE_LINKED_LIST
if (!pMem)
- return Malloc(size);
+ return Malloc(size);
if (!size) {
- Free(pMem);
- return NULL;
+ Free(pMem);
+ return NULL;
}
GetLock();
@@ -175,8 +175,8 @@ void* VMem::Realloc(void* pMem, size_t size)
UnlinkBlock(ptr);
ptr = (PMEMORY_BLOCK_HEADER)realloc(ptr, size+sizeof(MEMORY_BLOCK_HEADER));
if (!ptr) {
- FreeLock();
- return NULL;
+ FreeLock();
+ return NULL;
}
LinkBlock(ptr);
FreeLock();
@@ -191,25 +191,25 @@ void VMem::Free(void* pMem)
{
#ifdef _USE_LINKED_LIST
if (pMem) {
- PMEMORY_BLOCK_HEADER ptr = (PMEMORY_BLOCK_HEADER)(((char*)pMem)-sizeof(MEMORY_BLOCK_HEADER));
+ PMEMORY_BLOCK_HEADER ptr = (PMEMORY_BLOCK_HEADER)(((char*)pMem)-sizeof(MEMORY_BLOCK_HEADER));
if (ptr->owner != this) {
- if (ptr->owner) {
+ if (ptr->owner) {
#if 1
- int *nowhere = NULL;
- Perl_warn_nocontext("Free to wrong pool %p not %p",this,ptr->owner);
- *nowhere = 0; /* this segfault is deliberate,
- so you can see the stack trace */
+ int *nowhere = NULL;
+ Perl_warn_nocontext("Free to wrong pool %p not %p",this,ptr->owner);
+ *nowhere = 0; /* this segfault is deliberate,
+ so you can see the stack trace */
#else
ptr->owner->Free(pMem);
#endif
- }
- return;
+ }
+ return;
}
- GetLock();
- UnlinkBlock(ptr);
- ptr->owner = NULL;
- free(ptr);
- FreeLock();
+ GetLock();
+ UnlinkBlock(ptr);
+ ptr->owner = NULL;
+ free(ptr);
+ FreeLock();
}
#else /*_USE_LINKED_LIST*/
free(pMem);
@@ -238,7 +238,7 @@ int VMem::IsLocked(void)
* skirt the issue for now. */
BOOL bAccessed = TryEnterCriticalSection(&m_cs);
if(bAccessed) {
- LeaveCriticalSection(&m_cs);
+ LeaveCriticalSection(&m_cs);
}
return !bAccessed;
#else
@@ -251,7 +251,7 @@ long VMem::Release(void)
{
long lCount = InterlockedDecrement(&m_lRefCount);
if(!lCount)
- delete this;
+ delete this;
return lCount;
}
@@ -411,9 +411,9 @@ public:
inline BOOL CreateOk(void)
{
#ifdef _USE_BUDDY_BLOCKS
- return TRUE;
+ return TRUE;
#else
- return m_hHeap != NULL;
+ return m_hHeap != NULL;
#endif
};
@@ -425,7 +425,7 @@ protected:
int HeapAdd(void* ptr, size_t size
#ifdef USE_BIGBLOCK_ALLOC
- , BOOL bBigBlock
+ , BOOL bBigBlock
#endif
);
@@ -434,35 +434,35 @@ protected:
#ifdef _USE_BUDDY_BLOCKS
inline PBLOCK GetFreeListLink(int index)
{
- if (index >= nListEntries)
- index = nListEntries-1;
- return &m_FreeList[index].Dummy[sizeofTag];
+ if (index >= nListEntries)
+ index = nListEntries-1;
+ return &m_FreeList[index].Dummy[sizeofTag];
}
inline PBLOCK GetOverSizeFreeList(void)
{
- return &m_FreeList[nListEntries-1].Dummy[sizeofTag];
+ return &m_FreeList[nListEntries-1].Dummy[sizeofTag];
}
inline PBLOCK GetEOLFreeList(void)
{
- return &m_FreeList[nListEntries].Dummy[sizeofTag];
+ return &m_FreeList[nListEntries].Dummy[sizeofTag];
}
void AddToFreeList(PBLOCK block, size_t size)
{
- PBLOCK pFreeList = GetFreeListLink(CalcEntry(size));
- PBLOCK next = NEXT(pFreeList);
- NEXT(pFreeList) = block;
- SetLink(block, pFreeList, next);
- PREV(next) = block;
+ PBLOCK pFreeList = GetFreeListLink(CalcEntry(size));
+ PBLOCK next = NEXT(pFreeList);
+ NEXT(pFreeList) = block;
+ SetLink(block, pFreeList, next);
+ PREV(next) = block;
}
#endif
inline size_t CalcAllocSize(size_t size)
{
- /*
- * Adjust the real size of the block to be a multiple of sizeof(long), and add
- * the overhead for the boundary tags. Disallow negative or zero sizes.
- */
- return (size < minBlockSize) ? minAllocSize : (size_t)ROUND_UP(size) + blockOverhead;
+ /*
+ * Adjust the real size of the block to be a multiple of sizeof(long), and add
+ * the overhead for the boundary tags. Disallow negative or zero sizes.
+ */
+ return (size < minBlockSize) ? minAllocSize : (size_t)ROUND_UP(size) + blockOverhead;
}
#ifdef _USE_BUDDY_BLOCKS
@@ -491,8 +491,8 @@ VMem::VMem()
m_lRefCount = 1;
#ifndef _USE_BUDDY_BLOCKS
BOOL bRet = (NULL != (m_hHeap = HeapCreate(HEAP_NO_SERIALIZE,
- lAllocStart, /* initial size of heap */
- 0))); /* no upper limit on size of heap */
+ lAllocStart, /* initial size of heap */
+ 0))); /* no upper limit on size of heap */
ASSERT(bRet);
#endif
@@ -514,14 +514,14 @@ VMem::~VMem(void)
DeleteCriticalSection(&m_cs);
#ifdef _USE_BUDDY_BLOCKS
for(int index = 0; index < m_nHeaps; ++index) {
- VirtualFree(m_heaps[index].base, 0, MEM_RELEASE);
+ VirtualFree(m_heaps[index].base, 0, MEM_RELEASE);
}
#else /* !_USE_BUDDY_BLOCKS */
#ifdef USE_BIGBLOCK_ALLOC
for(int index = 0; index < m_nHeaps; ++index) {
- if (m_heaps[index].bBigBlock) {
- VirtualFree(m_heaps[index].base, 0, MEM_RELEASE);
- }
+ if (m_heaps[index].bBigBlock) {
+ VirtualFree(m_heaps[index].base, 0, MEM_RELEASE);
+ }
}
#endif
BOOL bRet = HeapDestroy(m_hHeap);
@@ -533,15 +533,15 @@ void VMem::ReInit(void)
{
for(int index = 0; index < m_nHeaps; ++index) {
#ifdef _USE_BUDDY_BLOCKS
- VirtualFree(m_heaps[index].base, 0, MEM_RELEASE);
+ VirtualFree(m_heaps[index].base, 0, MEM_RELEASE);
#else
#ifdef USE_BIGBLOCK_ALLOC
- if (m_heaps[index].bBigBlock) {
- VirtualFree(m_heaps[index].base, 0, MEM_RELEASE);
- }
- else
+ if (m_heaps[index].bBigBlock) {
+ VirtualFree(m_heaps[index].base, 0, MEM_RELEASE);
+ }
+ else
#endif
- HeapFree(m_hHeap, HEAP_NO_SERIALIZE, m_heaps[index].base);
+ HeapFree(m_hHeap, HEAP_NO_SERIALIZE, m_heaps[index].base);
#endif /* _USE_BUDDY_BLOCKS */
}
@@ -559,9 +559,9 @@ void VMem::Init(void)
* Set the next allocation size.
*/
for (int index = 0; index < nListEntries; ++index) {
- pFreeList = GetFreeListLink(index);
- SIZE(pFreeList) = PSIZE(pFreeList+minAllocSize) = 0;
- PREV(pFreeList) = NEXT(pFreeList) = pFreeList;
+ pFreeList = GetFreeListLink(index);
+ SIZE(pFreeList) = PSIZE(pFreeList+minAllocSize) = 0;
+ PREV(pFreeList) = NEXT(pFreeList) = pFreeList;
}
pFreeList = GetEOLFreeList();
SIZE(pFreeList) = PSIZE(pFreeList+minAllocSize) = 0;
@@ -592,7 +592,7 @@ void* VMem::Malloc(size_t size)
*/
size_t realsize = CalcAllocSize(size);
if((int)realsize < minAllocSize || size == 0)
- return NULL;
+ return NULL;
#ifdef _USE_BUDDY_BLOCKS
/*
@@ -602,78 +602,78 @@ void* VMem::Malloc(size_t size)
* split the block if needed, stop at end of list marker
*/
{
- int index = CalcEntry(realsize);
- if (index < nListEntries-1) {
- ptr = GetFreeListLink(index);
- lsize = SIZE(ptr);
- if (lsize >= realsize) {
- rem = lsize - realsize;
- if(rem < minAllocSize) {
- /* Unlink the block from the free list. */
- Unlink(ptr);
- }
- else {
- /*
- * split the block
- * The remainder is big enough to split off into a new block.
- * Use the end of the block, resize the beginning of the block
- * no need to change the free list.
- */
- SetTags(ptr, rem);
- ptr += SIZE(ptr);
- lsize = realsize;
- }
- SetTags(ptr, lsize | 1);
- return ptr;
- }
- ptr = m_pRover;
- lsize = SIZE(ptr);
- if (lsize >= realsize) {
- rem = lsize - realsize;
- if(rem < minAllocSize) {
- /* Unlink the block from the free list. */
- Unlink(ptr);
- }
- else {
- /*
- * split the block
- * The remainder is big enough to split off into a new block.
- * Use the end of the block, resize the beginning of the block
- * no need to change the free list.
- */
- SetTags(ptr, rem);
- ptr += SIZE(ptr);
- lsize = realsize;
- }
- SetTags(ptr, lsize | 1);
- return ptr;
- }
- ptr = GetFreeListLink(index+1);
- while (NEXT(ptr)) {
- lsize = SIZE(ptr);
- if (lsize >= realsize) {
- size_t rem = lsize - realsize;
- if(rem < minAllocSize) {
- /* Unlink the block from the free list. */
- Unlink(ptr);
- }
- else {
- /*
- * split the block
- * The remainder is big enough to split off into a new block.
- * Use the end of the block, resize the beginning of the block
- * no need to change the free list.
- */
- SetTags(ptr, rem);
- ptr += SIZE(ptr);
- lsize = realsize;
- }
- SetTags(ptr, lsize | 1);
- return ptr;
- }
- ptr += sizeof(FREE_LIST_ENTRY);
- }
- }
+ int index = CalcEntry(realsize);
+ if (index < nListEntries-1) {
+ ptr = GetFreeListLink(index);
+ lsize = SIZE(ptr);
+ if (lsize >= realsize) {
+ rem = lsize - realsize;
+ if(rem < minAllocSize) {
+ /* Unlink the block from the free list. */
+ Unlink(ptr);
+ }
+ else {
+ /*
+ * split the block
+ * The remainder is big enough to split off into a new block.
+ * Use the end of the block, resize the beginning of the block
+ * no need to change the free list.
+ */
+ SetTags(ptr, rem);
+ ptr += SIZE(ptr);
+ lsize = realsize;
+ }
+ SetTags(ptr, lsize | 1);
+ return ptr;
+ }
+ ptr = m_pRover;
+ lsize = SIZE(ptr);
+ if (lsize >= realsize) {
+ rem = lsize - realsize;
+ if(rem < minAllocSize) {
+ /* Unlink the block from the free list. */
+ Unlink(ptr);
+ }
+ else {
+ /*
+ * split the block
+ * The remainder is big enough to split off into a new block.
+ * Use the end of the block, resize the beginning of the block
+ * no need to change the free list.
+ */
+ SetTags(ptr, rem);
+ ptr += SIZE(ptr);
+ lsize = realsize;
+ }
+ SetTags(ptr, lsize | 1);
+ return ptr;
+ }
+ ptr = GetFreeListLink(index+1);
+ while (NEXT(ptr)) {
+ lsize = SIZE(ptr);
+ if (lsize >= realsize) {
+ size_t rem = lsize - realsize;
+ if(rem < minAllocSize) {
+ /* Unlink the block from the free list. */
+ Unlink(ptr);
+ }
+ else {
+ /*
+ * split the block
+ * The remainder is big enough to split off into a new block.
+ * Use the end of the block, resize the beginning of the block
+ * no need to change the free list.
+ */
+ SetTags(ptr, rem);
+ ptr += SIZE(ptr);
+ lsize = realsize;
+ }
+ SetTags(ptr, lsize | 1);
+ return ptr;
+ }
+ ptr += sizeof(FREE_LIST_ENTRY);
+ }
+ }
}
#endif
@@ -684,46 +684,46 @@ void* VMem::Malloc(size_t size)
ptr = m_pRover; /* start searching at rover */
int loops = 2; /* allow two times through the loop */
for(;;) {
- lsize = SIZE(ptr);
- ASSERT((lsize&1)==0);
- /* is block big enough? */
- if(lsize >= realsize) {
- /* if the remainder is too small, don't bother splitting the block. */
- rem = lsize - realsize;
- if(rem < minAllocSize) {
- if(m_pRover == ptr)
- m_pRover = NEXT(ptr);
-
- /* Unlink the block from the free list. */
- Unlink(ptr);
- }
- else {
- /*
- * split the block
- * The remainder is big enough to split off into a new block.
- * Use the end of the block, resize the beginning of the block
- * no need to change the free list.
- */
- SetTags(ptr, rem);
- ptr += SIZE(ptr);
- lsize = realsize;
- }
- /* Set the boundary tags to mark it as allocated. */
- SetTags(ptr, lsize | 1);
- return ((void *)ptr);
- }
-
- /*
- * This block was unsuitable. If we've gone through this list once already without
- * finding anything, allocate some new memory from the heap and try again.
- */
- ptr = NEXT(ptr);
- if(ptr == m_pRover) {
- if(!(loops-- && Getmem(realsize))) {
- return NULL;
- }
- ptr = m_pRover;
- }
+ lsize = SIZE(ptr);
+ ASSERT((lsize&1)==0);
+ /* is block big enough? */
+ if(lsize >= realsize) {
+ /* if the remainder is too small, don't bother splitting the block. */
+ rem = lsize - realsize;
+ if(rem < minAllocSize) {
+ if(m_pRover == ptr)
+ m_pRover = NEXT(ptr);
+
+ /* Unlink the block from the free list. */
+ Unlink(ptr);
+ }
+ else {
+ /*
+ * split the block
+ * The remainder is big enough to split off into a new block.
+ * Use the end of the block, resize the beginning of the block
+ * no need to change the free list.
+ */
+ SetTags(ptr, rem);
+ ptr += SIZE(ptr);
+ lsize = realsize;
+ }
+ /* Set the boundary tags to mark it as allocated. */
+ SetTags(ptr, lsize | 1);
+ return ((void *)ptr);
+ }
+
+ /*
+ * This block was unsuitable. If we've gone through this list once already without
+ * finding anything, allocate some new memory from the heap and try again.
+ */
+ ptr = NEXT(ptr);
+ if(ptr == m_pRover) {
+ if(!(loops-- && Getmem(realsize))) {
+ return NULL;
+ }
+ ptr = m_pRover;
+ }
}
}
@@ -733,24 +733,24 @@ void* VMem::Realloc(void* block, size_t size)
/* if size is zero, free the block. */
if(size == 0) {
- Free(block);
- return (NULL);
+ Free(block);
+ return (NULL);
}
/* if block pointer is NULL, do a Malloc(). */
if(block == NULL)
- return Malloc(size);
+ return Malloc(size);
/*
* Grow or shrink the block in place.
* if the block grows then the next block will be used if free
*/
if(Expand(block, size) != NULL)
- return block;
+ return block;
size_t realsize = CalcAllocSize(size);
if((int)realsize < minAllocSize)
- return NULL;
+ return NULL;
/*
* see if the previous block is free, and is it big enough to cover the new size
@@ -760,46 +760,46 @@ void* VMem::Realloc(void* block, size_t size)
size_t cursize = SIZE(ptr) & ~1;
size_t psize = PSIZE(ptr);
if((psize&1) == 0 && (psize + cursize) >= realsize) {
- PBLOCK prev = ptr - psize;
- if(m_pRover == prev)
- m_pRover = NEXT(prev);
-
- /* Unlink the next block from the free list. */
- Unlink(prev);
-
- /* Copy contents of old block to new location, make it the current block. */
- memmove(prev, ptr, cursize);
- cursize += psize; /* combine sizes */
- ptr = prev;
-
- size_t rem = cursize - realsize;
- if(rem >= minAllocSize) {
- /*
- * The remainder is big enough to be a new block. Set boundary
- * tags for the resized block and the new block.
- */
- prev = ptr + realsize;
- /*
- * add the new block to the free list.
- * next block cannot be free
- */
- SetTags(prev, rem);
+ PBLOCK prev = ptr - psize;
+ if(m_pRover == prev)
+ m_pRover = NEXT(prev);
+
+ /* Unlink the next block from the free list. */
+ Unlink(prev);
+
+ /* Copy contents of old block to new location, make it the current block. */
+ memmove(prev, ptr, cursize);
+ cursize += psize; /* combine sizes */
+ ptr = prev;
+
+ size_t rem = cursize - realsize;
+ if(rem >= minAllocSize) {
+ /*
+ * The remainder is big enough to be a new block. Set boundary
+ * tags for the resized block and the new block.
+ */
+ prev = ptr + realsize;
+ /*
+ * add the new block to the free list.
+ * next block cannot be free
+ */
+ SetTags(prev, rem);
#ifdef _USE_BUDDY_BLOCKS
- AddToFreeList(prev, rem);
+ AddToFreeList(prev, rem);
#else
- AddToFreeList(prev, m_pFreeList);
+ AddToFreeList(prev, m_pFreeList);
#endif
- cursize = realsize;
+ cursize = realsize;
}
- /* Set the boundary tags to mark it as allocated. */
- SetTags(ptr, cursize | 1);
+ /* Set the boundary tags to mark it as allocated. */
+ SetTags(ptr, cursize | 1);
return ((void *)ptr);
}
/* Allocate a new block, copy the old to the new, and free the old. */
if((ptr = (PBLOCK)Malloc(size)) != NULL) {
- memmove(ptr, block, cursize-blockOverhead);
- Free(block);
+ memmove(ptr, block, cursize-blockOverhead);
+ Free(block);
}
return ((void *)ptr);
}
@@ -810,15 +810,15 @@ void VMem::Free(void* p)
/* Ignore null pointer. */
if(p == NULL)
- return;
+ return;
PBLOCK ptr = (PBLOCK)p;
/* Check for attempt to free a block that's already free. */
size_t size = SIZE(ptr);
if((size&1) == 0) {
- MEMODSlx("Attempt to free previously freed block", (long)p);
- return;
+ MEMODSlx("Attempt to free previously freed block", (long)p);
+ return;
}
size &= ~1; /* remove allocated tag */
@@ -828,12 +828,12 @@ void VMem::Free(void* p)
#endif
size_t psize = PSIZE(ptr);
if((psize&1) == 0) {
- ptr -= psize; /* point to previous block */
- size += psize; /* merge the sizes of the two blocks */
+ ptr -= psize; /* point to previous block */
+ size += psize; /* merge the sizes of the two blocks */
#ifdef _USE_BUDDY_BLOCKS
- Unlink(ptr);
+ Unlink(ptr);
#else
- linked = TRUE; /* it's already on the free list */
+ linked = TRUE; /* it's already on the free list */
#endif
}
@@ -841,15 +841,15 @@ void VMem::Free(void* p)
PBLOCK next = ptr + size; /* point to next physical block */
size_t nsize = SIZE(next);
if((nsize&1) == 0) {
- /* block is free move rover if needed */
- if(m_pRover == next)
- m_pRover = NEXT(next);
+ /* block is free move rover if needed */
+ if(m_pRover == next)
+ m_pRover = NEXT(next);
- /* unlink the next block from the free list. */
- Unlink(next);
+ /* unlink the next block from the free list. */
+ Unlink(next);
- /* merge the sizes of this block and the next block. */
- size += nsize;
+ /* merge the sizes of this block and the next block. */
+ size += nsize;
}
/* Set the boundary tags for the block; */
@@ -857,10 +857,10 @@ void VMem::Free(void* p)
/* Link the block to the head of the free list. */
#ifdef _USE_BUDDY_BLOCKS
- AddToFreeList(ptr, size);
+ AddToFreeList(ptr, size);
#else
if(!linked) {
- AddToFreeList(ptr, m_pFreeList);
+ AddToFreeList(ptr, m_pFreeList);
}
#endif
}
@@ -883,7 +883,7 @@ int VMem::IsLocked(void)
* skirt the issue for now. */
BOOL bAccessed = TryEnterCriticalSection(&m_cs);
if(bAccessed) {
- LeaveCriticalSection(&m_cs);
+ LeaveCriticalSection(&m_cs);
}
return !bAccessed;
#else
@@ -897,7 +897,7 @@ long VMem::Release(void)
{
long lCount = InterlockedDecrement(&m_lRefCount);
if(!lCount)
- delete this;
+ delete this;
return lCount;
}
@@ -923,30 +923,30 @@ int VMem::Getmem(size_t requestSize)
* adjust up
*/
if(size < (unsigned long)m_lAllocSize)
- size = m_lAllocSize;
+ size = m_lAllocSize;
/* Update the size to allocate on the next request */
if(m_lAllocSize != lAllocMax)
- m_lAllocSize <<= 2;
+ m_lAllocSize <<= 2;
#ifndef _USE_BUDDY_BLOCKS
if(m_nHeaps != 0
#ifdef USE_BIGBLOCK_ALLOC
- && !m_heaps[m_nHeaps-1].bBigBlock
+ && !m_heaps[m_nHeaps-1].bBigBlock
#endif
- ) {
- /* Expand the last allocated heap */
- ptr = HeapReAlloc(m_hHeap, HEAP_REALLOC_IN_PLACE_ONLY|HEAP_NO_SERIALIZE,
- m_heaps[m_nHeaps-1].base,
- m_heaps[m_nHeaps-1].len + size);
- if(ptr != 0) {
- HeapAdd(((char*)ptr) + m_heaps[m_nHeaps-1].len, size
+ ) {
+ /* Expand the last allocated heap */
+ ptr = HeapReAlloc(m_hHeap, HEAP_REALLOC_IN_PLACE_ONLY|HEAP_NO_SERIALIZE,
+ m_heaps[m_nHeaps-1].base,
+ m_heaps[m_nHeaps-1].len + size);
+ if(ptr != 0) {
+ HeapAdd(((char*)ptr) + m_heaps[m_nHeaps-1].len, size
#ifdef USE_BIGBLOCK_ALLOC
- , FALSE
+ , FALSE
#endif
- );
- return -1;
- }
+ );
+ return -1;
+ }
}
#endif /* _USE_BUDDY_BLOCKS */
@@ -957,7 +957,7 @@ int VMem::Getmem(size_t requestSize)
* the above ROUND_UP64K may not have added any memory to include this.
*/
if(size == requestSize)
- size = (size_t)ROUND_UP64K(requestSize+(blockOverhead));
+ size = (size_t)ROUND_UP64K(requestSize+(blockOverhead));
Restart:
#ifdef _USE_BUDDY_BLOCKS
@@ -966,8 +966,8 @@ Restart:
#ifdef USE_BIGBLOCK_ALLOC
bBigBlock = FALSE;
if (size >= nMaxHeapAllocSize) {
- bBigBlock = TRUE;
- ptr = VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE);
+ bBigBlock = TRUE;
+ ptr = VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE);
}
else
#endif
@@ -975,28 +975,28 @@ Restart:
#endif /* _USE_BUDDY_BLOCKS */
if (!ptr) {
- /* try to allocate a smaller chunk */
- size >>= 1;
- if(size > requestSize)
- goto Restart;
+ /* try to allocate a smaller chunk */
+ size >>= 1;
+ if(size > requestSize)
+ goto Restart;
}
if(ptr == 0) {
- MEMODSlx("HeapAlloc failed on size!!!", size);
- return 0;
+ MEMODSlx("HeapAlloc failed on size!!!", size);
+ return 0;
}
#ifdef _USE_BUDDY_BLOCKS
if (HeapAdd(ptr, size)) {
- VirtualFree(ptr, 0, MEM_RELEASE);
- return 0;
+ VirtualFree(ptr, 0, MEM_RELEASE);
+ return 0;
}
#else
#ifdef USE_BIGBLOCK_ALLOC
if (HeapAdd(ptr, size, bBigBlock)) {
- if (bBigBlock) {
- VirtualFree(ptr, 0, MEM_RELEASE);
- }
+ if (bBigBlock) {
+ VirtualFree(ptr, 0, MEM_RELEASE);
+ }
}
#else
HeapAdd(ptr, size);
@@ -1015,7 +1015,7 @@ int VMem::HeapAdd(void* p, size_t size
/* Check size, then round size down to next long word boundary. */
if(size < minAllocSize)
- return -1;
+ return -1;
size = (size_t)ROUND_DOWN(size);
PBLOCK ptr = (PBLOCK)p;
@@ -1023,47 +1023,47 @@ int VMem::HeapAdd(void* p, size_t size
#ifdef USE_BIGBLOCK_ALLOC
if (!bBigBlock) {
#endif
- /*
- * Search for another heap area that's contiguous with the bottom of this new area.
- * (It should be extremely unusual to find one that's contiguous with the top).
- */
- for(index = 0; index < m_nHeaps; ++index) {
- if(ptr == m_heaps[index].base + (int)m_heaps[index].len) {
- /*
- * The new block is contiguous with a previously allocated heap area. Add its
- * length to that of the previous heap. Merge it with the dummy end-of-heap
- * area marker of the previous heap.
- */
- m_heaps[index].len += size;
- break;
- }
- }
+ /*
+ * Search for another heap area that's contiguous with the bottom of this new area.
+ * (It should be extremely unusual to find one that's contiguous with the top).
+ */
+ for(index = 0; index < m_nHeaps; ++index) {
+ if(ptr == m_heaps[index].base + (int)m_heaps[index].len) {
+ /*
+ * The new block is contiguous with a previously allocated heap area. Add its
+ * length to that of the previous heap. Merge it with the dummy end-of-heap
+ * area marker of the previous heap.
+ */
+ m_heaps[index].len += size;
+ break;
+ }
+ }
#ifdef USE_BIGBLOCK_ALLOC
}
else {
- index = m_nHeaps;
+ index = m_nHeaps;
}
#endif
if(index == m_nHeaps) {
- /* The new block is not contiguous, or is BigBlock. Add it to the heap list. */
- if(m_nHeaps == maxHeaps) {
- return -1; /* too many non-contiguous heaps */
- }
- m_heaps[m_nHeaps].base = ptr;
- m_heaps[m_nHeaps].len = size;
+ /* The new block is not contiguous, or is BigBlock. Add it to the heap list. */
+ if(m_nHeaps == maxHeaps) {
+ return -1; /* too many non-contiguous heaps */
+ }
+ m_heaps[m_nHeaps].base = ptr;
+ m_heaps[m_nHeaps].len = size;
#ifdef USE_BIGBLOCK_ALLOC
- m_heaps[m_nHeaps].bBigBlock = bBigBlock;
+ m_heaps[m_nHeaps].bBigBlock = bBigBlock;
#endif
- m_nHeaps++;
-
- /*
- * Reserve the first LONG in the block for the ending boundary tag of a dummy
- * block at the start of the heap area.
- */
- size -= blockOverhead;
- ptr += blockOverhead;
- PSIZE(ptr) = 1; /* mark the dummy previous block as allocated */
+ m_nHeaps++;
+
+ /*
+ * Reserve the first LONG in the block for the ending boundary tag of a dummy
+ * block at the start of the heap area.
+ */
+ size -= blockOverhead;
+ ptr += blockOverhead;
+ PSIZE(ptr) = 1; /* mark the dummy previous block as allocated */
}
/*
@@ -1091,36 +1091,36 @@ void* VMem::Expand(void* block, size_t size)
*/
size_t realsize = CalcAllocSize(size);
if((int)realsize < minAllocSize || size == 0)
- return NULL;
+ return NULL;
PBLOCK ptr = (PBLOCK)block;
/* if the current size is the same as requested, do nothing. */
size_t cursize = SIZE(ptr) & ~1;
if(cursize == realsize) {
- return block;
+ return block;
}
/* if the block is being shrunk, convert the remainder of the block into a new free block. */
if(realsize <= cursize) {
- size_t nextsize = cursize - realsize; /* size of new remainder block */
- if(nextsize >= minAllocSize) {
- /*
- * Split the block
- * Set boundary tags for the resized block and the new block.
- */
- SetTags(ptr, realsize | 1);
- ptr += realsize;
-
- /*
- * add the new block to the free list.
- * call Free to merge this block with next block if free
- */
- SetTags(ptr, nextsize | 1);
- Free(ptr);
- }
-
- return block;
+ size_t nextsize = cursize - realsize; /* size of new remainder block */
+ if(nextsize >= minAllocSize) {
+ /*
+ * Split the block
+ * Set boundary tags for the resized block and the new block.
+ */
+ SetTags(ptr, realsize | 1);
+ ptr += realsize;
+
+ /*
+ * add the new block to the free list.
+ * call Free to merge this block with next block if free
+ */
+ SetTags(ptr, nextsize | 1);
+ Free(ptr);
+ }
+
+ return block;
}
PBLOCK next = ptr + cursize;
@@ -1128,39 +1128,39 @@ void* VMem::Expand(void* block, size_t size)
/* Check the next block for consistency.*/
if((nextsize&1) == 0 && (nextsize + cursize) >= realsize) {
- /*
- * The next block is free and big enough. Add the part that's needed
- * to our block, and split the remainder off into a new block.
- */
- if(m_pRover == next)
- m_pRover = NEXT(next);
-
- /* Unlink the next block from the free list. */
- Unlink(next);
- cursize += nextsize; /* combine sizes */
-
- size_t rem = cursize - realsize; /* size of remainder */
- if(rem >= minAllocSize) {
- /*
- * The remainder is big enough to be a new block.
- * Set boundary tags for the resized block and the new block.
- */
- next = ptr + realsize;
- /*
- * add the new block to the free list.
- * next block cannot be free
- */
- SetTags(next, rem);
+ /*
+ * The next block is free and big enough. Add the part that's needed
+ * to our block, and split the remainder off into a new block.
+ */
+ if(m_pRover == next)
+ m_pRover = NEXT(next);
+
+ /* Unlink the next block from the free list. */
+ Unlink(next);
+ cursize += nextsize; /* combine sizes */
+
+ size_t rem = cursize - realsize; /* size of remainder */
+ if(rem >= minAllocSize) {
+ /*
+ * The remainder is big enough to be a new block.
+ * Set boundary tags for the resized block and the new block.
+ */
+ next = ptr + realsize;
+ /*
+ * add the new block to the free list.
+ * next block cannot be free
+ */
+ SetTags(next, rem);
#ifdef _USE_BUDDY_BLOCKS
- AddToFreeList(next, rem);
+ AddToFreeList(next, rem);
#else
- AddToFreeList(next, m_pFreeList);
+ AddToFreeList(next, m_pFreeList);
#endif
- cursize = realsize;
+ cursize = realsize;
}
- /* Set the boundary tags to mark it as allocated. */
- SetTags(ptr, cursize | 1);
- return ((void *)ptr);
+ /* Set the boundary tags to mark it as allocated. */
+ SetTags(ptr, cursize | 1);
+ return ((void *)ptr);
}
return NULL;
}
@@ -1172,70 +1172,70 @@ void VMem::MemoryUsageMessage(char *str, long x, long y, int c)
{
char szBuffer[512];
if(str) {
- if(!m_pLog)
- m_pLog = fopen(LOG_FILENAME, "w");
- sprintf(szBuffer, str, x, y, c);
- fputs(szBuffer, m_pLog);
+ if(!m_pLog)
+ m_pLog = fopen(LOG_FILENAME, "w");
+ sprintf(szBuffer, str, x, y, c);
+ fputs(szBuffer, m_pLog);
}
else {
- if(m_pLog) {
- fflush(m_pLog);
- fclose(m_pLog);
- m_pLog = 0;
- }
+ if(m_pLog) {
+ fflush(m_pLog);
+ fclose(m_pLog);
+ m_pLog = 0;
+ }
}
}
void VMem::WalkHeap(int complete)
{
if(complete) {
- MemoryUsageMessage(NULL, 0, 0, 0);
- size_t total = 0;
- for(int i = 0; i < m_nHeaps; ++i) {
- total += m_heaps[i].len;
- }
- MemoryUsageMessage("VMem heaps used %d. Total memory %08x\n", m_nHeaps, total, 0);
-
- /* Walk all the heaps - verify structures */
- for(int index = 0; index < m_nHeaps; ++index) {
- PBLOCK ptr = m_heaps[index].base;
- size_t size = m_heaps[index].len;
+ MemoryUsageMessage(NULL, 0, 0, 0);
+ size_t total = 0;
+ for(int i = 0; i < m_nHeaps; ++i) {
+ total += m_heaps[i].len;
+ }
+ MemoryUsageMessage("VMem heaps used %d. Total memory %08x\n", m_nHeaps, total, 0);
+
+ /* Walk all the heaps - verify structures */
+ for(int index = 0; index < m_nHeaps; ++index) {
+ PBLOCK ptr = m_heaps[index].base;
+ size_t size = m_heaps[index].len;
#ifndef _USE_BUDDY_BLOCKS
#ifdef USE_BIGBLOCK_ALLOC
- if (!m_heaps[m_nHeaps].bBigBlock)
+ if (!m_heaps[m_nHeaps].bBigBlock)
#endif
- ASSERT(HeapValidate(m_hHeap, HEAP_NO_SERIALIZE, ptr));
+ ASSERT(HeapValidate(m_hHeap, HEAP_NO_SERIALIZE, ptr));
#endif
- /* set over reserved header block */
- size -= blockOverhead;
- ptr += blockOverhead;
- PBLOCK pLast = ptr + size;
- ASSERT(PSIZE(ptr) == 1); /* dummy previous block is allocated */
- ASSERT(SIZE(pLast) == 1); /* dummy next block is allocated */
- while(ptr < pLast) {
- ASSERT(ptr > m_heaps[index].base);
- size_t cursize = SIZE(ptr) & ~1;
- ASSERT((PSIZE(ptr+cursize) & ~1) == cursize);
- MemoryUsageMessage("Memory Block %08x: Size %08x %c\n", (long)ptr, cursize, (SIZE(ptr)&1) ? 'x' : ' ');
- if(!(SIZE(ptr)&1)) {
- /* this block is on the free list */
- PBLOCK tmp = NEXT(ptr);
- while(tmp != ptr) {
- ASSERT((SIZE(tmp)&1)==0);
- if(tmp == m_pFreeList)
- break;
- ASSERT(NEXT(tmp));
- tmp = NEXT(tmp);
- }
- if(tmp == ptr) {
- MemoryUsageMessage("Memory Block %08x: Size %08x free but not in free list\n", (long)ptr, cursize, 0);
- }
- }
- ptr += cursize;
- }
- }
- MemoryUsageMessage(NULL, 0, 0, 0);
+ /* set over reserved header block */
+ size -= blockOverhead;
+ ptr += blockOverhead;
+ PBLOCK pLast = ptr + size;
+ ASSERT(PSIZE(ptr) == 1); /* dummy previous block is allocated */
+ ASSERT(SIZE(pLast) == 1); /* dummy next block is allocated */
+ while(ptr < pLast) {
+ ASSERT(ptr > m_heaps[index].base);
+ size_t cursize = SIZE(ptr) & ~1;
+ ASSERT((PSIZE(ptr+cursize) & ~1) == cursize);
+ MemoryUsageMessage("Memory Block %08x: Size %08x %c\n", (long)ptr, cursize, (SIZE(ptr)&1) ? 'x' : ' ');
+ if(!(SIZE(ptr)&1)) {
+ /* this block is on the free list */
+ PBLOCK tmp = NEXT(ptr);
+ while(tmp != ptr) {
+ ASSERT((SIZE(tmp)&1)==0);
+ if(tmp == m_pFreeList)
+ break;
+ ASSERT(NEXT(tmp));
+ tmp = NEXT(tmp);
+ }
+ if(tmp == ptr) {
+ MemoryUsageMessage("Memory Block %08x: Size %08x free but not in free list\n", (long)ptr, cursize, 0);
+ }
+ }
+ ptr += cursize;
+ }
+ }
+ MemoryUsageMessage(NULL, 0, 0, 0);
}
}
#endif /* _DEBUG_MEM */
diff --git a/Master/tlpkg/tlperl/lib/CORE/vutil.h b/Master/tlpkg/tlperl/lib/CORE/vutil.h
index ffeb05cae3b..61caf70ba54 100644
--- a/Master/tlpkg/tlperl/lib/CORE/vutil.h
+++ b/Master/tlpkg/tlperl/lib/CORE/vutil.h
@@ -1,10 +1,6 @@
/* This file is part of the "version" CPAN distribution. Please avoid
editing it in the perl core. */
-#ifndef PERL_CORE
-# include "ppport.h"
-#endif
-
/* The MUTABLE_*() macros cast pointers to the types shown, in such a way
* (compiler permitting) that casting away const-ness will give a warning;
* e.g.:
@@ -20,12 +16,24 @@
# else
# define MUTABLE_PTR(p) ((void *) (p))
# endif
+#endif
+#ifndef MUTABLE_AV
# define MUTABLE_AV(p) ((AV *)MUTABLE_PTR(p))
+#endif
+#ifndef MUTABLE_CV
# define MUTABLE_CV(p) ((CV *)MUTABLE_PTR(p))
+#endif
+#ifndef MUTABLE_GV
# define MUTABLE_GV(p) ((GV *)MUTABLE_PTR(p))
+#endif
+#ifndef MUTABLE_HV
# define MUTABLE_HV(p) ((HV *)MUTABLE_PTR(p))
+#endif
+#ifndef MUTABLE_IO
# define MUTABLE_IO(p) ((IO *)MUTABLE_PTR(p))
+#endif
+#ifndef MUTABLE_SV
# define MUTABLE_SV(p) ((SV *)MUTABLE_PTR(p))
#endif
@@ -75,21 +83,12 @@ Perl_ck_warner(pTHX_ U32 err, const char* pat, ...)
# endif
#endif
-#define PERL_VERSION_DECIMAL(r,v,s) (r*1000000 + v*1000 + s)
-#define PERL_DECIMAL_VERSION \
- PERL_VERSION_DECIMAL(PERL_REVISION,PERL_VERSION,PERL_SUBVERSION)
-#define PERL_VERSION_LT(r,v,s) \
- (PERL_DECIMAL_VERSION < PERL_VERSION_DECIMAL(r,v,s))
-#define PERL_VERSION_GE(r,v,s) \
- (PERL_DECIMAL_VERSION >= PERL_VERSION_DECIMAL(r,v,s))
-
#if PERL_VERSION_LT(5,15,4)
# define ISA_VERSION_OBJ(v) (sv_isobject(v) && sv_derived_from(v,"version"))
#else
# define ISA_VERSION_OBJ(v) (sv_isobject(v) && sv_derived_from_pvn(v,"version",7,0))
#endif
-
#ifndef PERL_ARGS_ASSERT_CROAK_XS_USAGE
#define PERL_ARGS_ASSERT_CROAK_XS_USAGE assert(cv); assert(params)
@@ -224,7 +223,7 @@ const char * Perl_prescan_version(pTHX_ const char *s, bool strict, const char**
#if PERL_VERSION_LT(5,27,9)
-# define LC_NUMERIC_LOCK
+# define LC_NUMERIC_LOCK(cond)
# define LC_NUMERIC_UNLOCK
# if PERL_VERSION_LT(5,19,0)
# undef STORE_LC_NUMERIC_SET_STANDARD
diff --git a/Master/tlpkg/tlperl/lib/CORE/warnings.h b/Master/tlpkg/tlperl/lib/CORE/warnings.h
index f02edea0fa4..5547a1161a9 100644
--- a/Master/tlpkg/tlperl/lib/CORE/warnings.h
+++ b/Master/tlpkg/tlperl/lib/CORE/warnings.h
@@ -5,9 +5,9 @@
*/
-#define Off(x) ((x) / 8)
-#define Bit(x) (1 << ((x) % 8))
-#define IsSet(a, x) ((a)[Off(x)] & Bit(x))
+#define Perl_Warn_Off_(x) ((x) / 8)
+#define Perl_Warn_Bit_(x) (1 << ((x) % 8))
+#define PerlWarnIsSet_(a, x) ((a)[Perl_Warn_Off_(x)] & Perl_Warn_Bit_(x))
#define G_WARN_OFF 0 /* $^W == 0 */
@@ -22,7 +22,7 @@
#define pWARN_NONE (STRLEN *) &PL_WARN_NONE /* no warnings 'all' */
#define specialWARN(x) ((x) == pWARN_STD || (x) == pWARN_ALL || \
- (x) == pWARN_NONE)
+ (x) == pWARN_NONE)
/* if PL_warnhook is set to this value, then warnings die */
#define PERL_WARNHOOK_FATAL (&PL_sv_placeholder)
@@ -131,6 +131,116 @@
#define WARN_EXPERIMENTAL__ISA 73
+/* Warnings Categories added in Perl 5.033 */
+
+#define WARN_EXPERIMENTAL__TRY 74
+#define WARNsize 19
+#define WARN_ALLstring "\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125"
+#define WARN_NONEstring "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+
+#define isLEXWARN_on \
+ cBOOL(PL_curcop && PL_curcop->cop_warnings != pWARN_STD)
+#define isLEXWARN_off \
+ cBOOL(!PL_curcop || PL_curcop->cop_warnings == pWARN_STD)
+#define isWARN_ONCE (PL_dowarn & (G_WARN_ON|G_WARN_ONCE))
+#define isWARN_on(c,x) (PerlWarnIsSet_((U8 *)(c + 1), 2*(x)))
+#define isWARNf_on(c,x) (PerlWarnIsSet_((U8 *)(c + 1), 2*(x)+1))
+
+#define DUP_WARNINGS(p) Perl_dup_warnings(aTHX_ p)
+
+#define free_and_set_cop_warnings(cmp,w) STMT_START { \
+ if (!specialWARN((cmp)->cop_warnings)) PerlMemShared_free((cmp)->cop_warnings); \
+ (cmp)->cop_warnings = w; \
+} STMT_END
+
+/*
+
+=head1 Warning and Dieing
+
+In all these calls, the C<U32 wI<n>> parameters are warning category
+constants. You can see the ones currently available in
+L<warnings/Category Hierarchy>, just capitalize all letters in the names
+and prefix them by C<WARN_>. So, for example, the category C<void> used in a
+perl program becomes C<WARN_VOID> when used in XS code and passed to one of
+the calls below.
+
+=for apidoc Am|bool|ckWARN|U32 w
+=for apidoc_item ||ckWARN2|U32 w1|U32 w2
+=for apidoc_item ||ckWARN3|U32 w1|U32 w2|U32 w3
+=for apidoc_item ||ckWARN4|U32 w1|U32 w2|U32 w3|U32 w4
+These return a boolean as to whether or not warnings are enabled for any of
+the warning category(ies) parameters: C<w>, C<w1>, ....
+
+Should any of the categories by default be enabled even if not within the
+scope of S<C<use warnings>>, instead use the C<L</ckWARN_d>> macros.
+
+The categories must be completely independent, one may not be subclassed from
+the other.
+
+=for apidoc Am|bool|ckWARN_d|U32 w
+=for apidoc_item ||ckWARN2_d|U32 w1|U32 w2
+=for apidoc_item ||ckWARN3_d|U32 w1|U32 w2|U32 w3
+=for apidoc_item ||ckWARN4_d|U32 w1|U32 w2|U32 w3|U32 w4
+
+Like C<L</ckWARN>>, but for use if and only if the warning category(ies) is by
+default enabled even if not within the scope of S<C<use warnings>>.
+
+=for apidoc Am|U32|packWARN|U32 w1
+=for apidoc_item ||packWARN2|U32 w1|U32 w2
+=for apidoc_item ||packWARN3|U32 w1|U32 w2|U32 w3
+=for apidoc_item ||packWARN4|U32 w1|U32 w2|U32 w3|U32 w4
+
+These macros are used to pack warning categories into a single U32 to pass to
+macros and functions that take a warning category parameter. The number of
+categories to pack is given by the name, with a corresponding number of
+category parameters passed.
+
+=cut
+
+*/
+
+#define ckWARN(w) Perl_ckwarn(aTHX_ packWARN(w))
+
+/* The w1, w2 ... should be independent warnings categories; one shouldn't be
+ * a subcategory of any other */
+
+#define ckWARN2(w1,w2) Perl_ckwarn(aTHX_ packWARN2(w1,w2))
+#define ckWARN3(w1,w2,w3) Perl_ckwarn(aTHX_ packWARN3(w1,w2,w3))
+#define ckWARN4(w1,w2,w3,w4) Perl_ckwarn(aTHX_ packWARN4(w1,w2,w3,w4))
+
+#define ckWARN_d(w) Perl_ckwarn_d(aTHX_ packWARN(w))
+#define ckWARN2_d(w1,w2) Perl_ckwarn_d(aTHX_ packWARN2(w1,w2))
+#define ckWARN3_d(w1,w2,w3) Perl_ckwarn_d(aTHX_ packWARN3(w1,w2,w3))
+#define ckWARN4_d(w1,w2,w3,w4) Perl_ckwarn_d(aTHX_ packWARN4(w1,w2,w3,w4))
+
+#define WARNshift 8
+
+#define packWARN(a) (a )
+
+/* The a, b, ... should be independent warnings categories; one shouldn't be
+ * a subcategory of any other */
+
+#define packWARN2(a,b) ((a) | ((b)<<8) )
+#define packWARN3(a,b,c) ((a) | ((b)<<8) | ((c)<<16) )
+#define packWARN4(a,b,c,d) ((a) | ((b)<<8) | ((c)<<16) | ((d) <<24))
+
+#define unpackWARN1(x) ((x) & 0xFF)
+#define unpackWARN2(x) (((x) >>8) & 0xFF)
+#define unpackWARN3(x) (((x) >>16) & 0xFF)
+#define unpackWARN4(x) (((x) >>24) & 0xFF)
+
+#define ckDEAD(x) \
+ (PL_curcop && \
+ !specialWARN(PL_curcop->cop_warnings) && \
+ (isWARNf_on(PL_curcop->cop_warnings, unpackWARN1(x)) || \
+ (unpackWARN2(x) && \
+ (isWARNf_on(PL_curcop->cop_warnings, unpackWARN2(x)) || \
+ (unpackWARN3(x) && \
+ (isWARNf_on(PL_curcop->cop_warnings, unpackWARN3(x)) || \
+ (unpackWARN4(x) && \
+ isWARNf_on(PL_curcop->cop_warnings, unpackWARN4(x)))))))))
+
+
/*
=for apidoc Amnh||WARN_ALL
@@ -207,135 +317,11 @@
=for apidoc Amnh||WARN_EXPERIMENTAL__UNIPROP_WILDCARDS
=for apidoc Amnh||WARN_EXPERIMENTAL__VLB
=for apidoc Amnh||WARN_EXPERIMENTAL__ISA
+=for apidoc Amnh||WARN_EXPERIMENTAL__TRY
=cut
*/
-#define WARNsize 19
-#define WARN_ALLstring "\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125"
-#define WARN_NONEstring "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-
-#define isLEXWARN_on \
- cBOOL(PL_curcop && PL_curcop->cop_warnings != pWARN_STD)
-#define isLEXWARN_off \
- cBOOL(!PL_curcop || PL_curcop->cop_warnings == pWARN_STD)
-#define isWARN_ONCE (PL_dowarn & (G_WARN_ON|G_WARN_ONCE))
-#define isWARN_on(c,x) (IsSet((U8 *)(c + 1), 2*(x)))
-#define isWARNf_on(c,x) (IsSet((U8 *)(c + 1), 2*(x)+1))
-
-#define DUP_WARNINGS(p) Perl_dup_warnings(aTHX_ p)
-
-#define free_and_set_cop_warnings(cmp,w) STMT_START { \
- if (!specialWARN((cmp)->cop_warnings)) PerlMemShared_free((cmp)->cop_warnings); \
- (cmp)->cop_warnings = w; \
-} STMT_END
-
-/*
-
-=head1 Warning and Dieing
-
-In all these calls, the C<U32 wI<n>> parameters are warning category
-constants. You can see the ones currently available in
-L<warnings/Category Hierarchy>, just capitalize all letters in the names
-and prefix them by C<WARN_>. So, for example, the category C<void> used in a
-perl program becomes C<WARN_VOID> when used in XS code and passed to one of
-the calls below.
-
-=for apidoc Am|bool|ckWARN|U32 w
-
-Returns a boolean as to whether or not warnings are enabled for the warning
-category C<w>. If the category is by default enabled even if not within the
-scope of S<C<use warnings>>, instead use the L</ckWARN_d> macro.
-
-=for apidoc Am|bool|ckWARN_d|U32 w
-
-Like C<L</ckWARN>>, but for use if and only if the warning category is by
-default enabled even if not within the scope of S<C<use warnings>>.
-
-=for apidoc Am|bool|ckWARN2|U32 w1|U32 w2
-
-Like C<L</ckWARN>>, but takes two warnings categories as input, and returns
-TRUE if either is enabled. If either category is by default enabled even if
-not within the scope of S<C<use warnings>>, instead use the L</ckWARN2_d>
-macro. The categories must be completely independent, one may not be
-subclassed from the other.
-
-=for apidoc Am|bool|ckWARN2_d|U32 w1|U32 w2
-
-Like C<L</ckWARN2>>, but for use if and only if either warning category is by
-default enabled even if not within the scope of S<C<use warnings>>.
-
-=for apidoc Am|bool|ckWARN3|U32 w1|U32 w2|U32 w3
-
-Like C<L</ckWARN2>>, but takes three warnings categories as input, and returns
-TRUE if any is enabled. If any of the categories is by default enabled even
-if not within the scope of S<C<use warnings>>, instead use the L</ckWARN3_d>
-macro. The categories must be completely independent, one may not be
-subclassed from any other.
-
-=for apidoc Am|bool|ckWARN3_d|U32 w1|U32 w2|U32 w3
-
-Like C<L</ckWARN3>>, but for use if and only if any of the warning categories
-is by default enabled even if not within the scope of S<C<use warnings>>.
-
-=for apidoc Am|bool|ckWARN4|U32 w1|U32 w2|U32 w3|U32 w4
-
-Like C<L</ckWARN3>>, but takes four warnings categories as input, and returns
-TRUE if any is enabled. If any of the categories is by default enabled even
-if not within the scope of S<C<use warnings>>, instead use the L</ckWARN4_d>
-macro. The categories must be completely independent, one may not be
-subclassed from any other.
-
-=for apidoc Am|bool|ckWARN4_d|U32 w1|U32 w2|U32 w3|U32 w4
-
-Like C<L</ckWARN4>>, but for use if and only if any of the warning categories
-is by default enabled even if not within the scope of S<C<use warnings>>.
-
-=cut
-
-*/
-
-#define ckWARN(w) Perl_ckwarn(aTHX_ packWARN(w))
-
-/* The w1, w2 ... should be independent warnings categories; one shouldn't be
- * a subcategory of any other */
-
-#define ckWARN2(w1,w2) Perl_ckwarn(aTHX_ packWARN2(w1,w2))
-#define ckWARN3(w1,w2,w3) Perl_ckwarn(aTHX_ packWARN3(w1,w2,w3))
-#define ckWARN4(w1,w2,w3,w4) Perl_ckwarn(aTHX_ packWARN4(w1,w2,w3,w4))
-
-#define ckWARN_d(w) Perl_ckwarn_d(aTHX_ packWARN(w))
-#define ckWARN2_d(w1,w2) Perl_ckwarn_d(aTHX_ packWARN2(w1,w2))
-#define ckWARN3_d(w1,w2,w3) Perl_ckwarn_d(aTHX_ packWARN3(w1,w2,w3))
-#define ckWARN4_d(w1,w2,w3,w4) Perl_ckwarn_d(aTHX_ packWARN4(w1,w2,w3,w4))
-
-#define WARNshift 8
-
-#define packWARN(a) (a )
-
-/* The a, b, ... should be independent warnings categories; one shouldn't be
- * a subcategory of any other */
-
-#define packWARN2(a,b) ((a) | ((b)<<8) )
-#define packWARN3(a,b,c) ((a) | ((b)<<8) | ((c)<<16) )
-#define packWARN4(a,b,c,d) ((a) | ((b)<<8) | ((c)<<16) | ((d) <<24))
-
-#define unpackWARN1(x) ((x) & 0xFF)
-#define unpackWARN2(x) (((x) >>8) & 0xFF)
-#define unpackWARN3(x) (((x) >>16) & 0xFF)
-#define unpackWARN4(x) (((x) >>24) & 0xFF)
-
-#define ckDEAD(x) \
- (PL_curcop && \
- !specialWARN(PL_curcop->cop_warnings) && \
- (isWARNf_on(PL_curcop->cop_warnings, unpackWARN1(x)) || \
- (unpackWARN2(x) && \
- (isWARNf_on(PL_curcop->cop_warnings, unpackWARN2(x)) || \
- (unpackWARN3(x) && \
- (isWARNf_on(PL_curcop->cop_warnings, unpackWARN3(x)) || \
- (unpackWARN4(x) && \
- isWARNf_on(PL_curcop->cop_warnings, unpackWARN4(x)))))))))
-
/* end of file warnings.h */
/* ex: set ro: */
diff --git a/Master/tlpkg/tlperl/lib/CORE/win32.h b/Master/tlpkg/tlperl/lib/CORE/win32.h
index c0ee5a6e92a..6d5e186204d 100644
--- a/Master/tlpkg/tlperl/lib/CORE/win32.h
+++ b/Master/tlpkg/tlperl/lib/CORE/win32.h
@@ -60,9 +60,6 @@
# define prime_env_iter()
# define WIN32IO_IS_STDIO /* don't pull in custom stdio layer */
# define WIN32SCK_IS_STDSCK /* don't pull in custom wsock layer */
-# ifdef PERL_GLOBAL_STRUCT
-# error PERL_GLOBAL_STRUCT cannot be defined with PERL_IMPLICIT_SYS
-# endif
#endif
#ifdef __GNUC__
@@ -114,7 +111,7 @@
#if (defined(__GNUC__) && defined(__MINGW32__) && \
!defined(__MINGW64_VERSION_MAJOR) && !defined(__clang__) && \
- ((__GNUC__ < 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ <= 5))))
+ ((__GNUC__ < 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ <= 5))))
/* use default fallbacks from perl.h for this particular GCC */
#else
# if !defined(PERLDLL) && !defined(PERL_EXT_RE_BUILD)
@@ -184,10 +181,10 @@ WINBASEAPI LPCH WINAPI GetEnvironmentStringsA(VOID);
#endif
struct tms {
- long tms_utime;
- long tms_stime;
- long tms_cutime;
- long tms_cstime;
+ long tms_utime;
+ long tms_stime;
+ long tms_cutime;
+ long tms_cstime;
};
#ifndef SYS_NMLN
@@ -231,8 +228,6 @@ struct utsname {
# define WIN32_NO_REGISTRY_M_(x) x,
#endif
-#define PERL_NO_FORCE_LINK /* no need for PL_force_link_funcs */
-
#define ENV_IS_CASELESS
#define PIPESOCK_MODE "b" /* pipes, sockets default to binmode */
@@ -423,7 +418,9 @@ extern void *sbrk(ptrdiff_t need);
#endif
extern char * getlogin(void);
extern int chown(const char *p, uid_t o, gid_t g);
-#if !defined(__MINGW64_VERSION_MAJOR) || __MINGW64_VERSION_MAJOR < 4
+#if((!defined(__MINGW64_VERSION_MAJOR) || __MINGW64_VERSION_MAJOR < 4) && \
+ (!defined(__MINGW32_MAJOR_VERSION) || __MINGW32_MAJOR_VERSION < 3 || \
+ (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION < 21)))
extern int mkstemp(const char *path);
#endif
#endif
@@ -568,7 +565,6 @@ struct interp_intern {
UINT timerid;
unsigned poll_count;
Sighandler_t sigtable[SIG_SIZE];
- bool sloppystat;
};
#define WIN32_POLL_INTERVAL 32768
@@ -602,7 +598,6 @@ struct interp_intern {
#define w32_init_socktype (PL_sys_intern.thr_intern.Winit_socktype)
#define w32_use_showwindow (PL_sys_intern.thr_intern.Wuse_showwindow)
#define w32_showwindow (PL_sys_intern.thr_intern.Wshowwindow)
-#define w32_sloppystat (PL_sys_intern.sloppystat)
#ifdef USE_ITHREADS
void win32_wait_for_children(pTHX);
@@ -736,5 +731,37 @@ DllExport void *win32_signal_context(void);
# define O_ACCMODE (O_RDWR | O_WRONLY | O_RDONLY)
#endif
+/* ucrt at least seems to allocate a whole bit per type,
+ just mask off one bit from the mask for our symlink
+ file type.
+*/
+#define _S_IFLNK ((unsigned)(_S_IFMT ^ (_S_IFMT & -_S_IFMT)))
+#undef S_ISLNK
+#define S_ISLNK(mode) (((mode) & _S_IFMT) == _S_IFLNK)
+
+/*
+
+The default CRT struct stat uses unsigned short for st_dev and st_ino
+which obviously isn't enough, so we define our own structure.
+
+ */
+
+typedef DWORD Dev_t;
+typedef unsigned __int64 Ino_t;
+
+struct w32_stat {
+ Dev_t st_dev;
+ Ino_t st_ino;
+ unsigned short st_mode;
+ DWORD st_nlink;
+ short st_uid;
+ short st_gid;
+ Dev_t st_rdev;
+ Off_t st_size;
+ time_t st_atime;
+ time_t st_mtime;
+ time_t st_ctime;
+};
+
#endif /* _INC_WIN32_PERL5 */
diff --git a/Master/tlpkg/tlperl/lib/CORE/win32iop.h b/Master/tlpkg/tlperl/lib/CORE/win32iop.h
index 559e1f9cd2e..9733d7b5324 100644
--- a/Master/tlpkg/tlperl/lib/CORE/win32iop.h
+++ b/Master/tlpkg/tlperl/lib/CORE/win32iop.h
@@ -69,6 +69,7 @@ DllExport FILE* win32_tmpfile(void);
DllExport void win32_abort(void);
DllExport int win32_fstat(int fd,Stat_t *sbufptr);
DllExport int win32_stat(const char *name,Stat_t *sbufptr);
+DllExport int win32_lstat(const char *name,Stat_t *sbufptr);
DllExport int win32_pipe( int *phandles, unsigned int psize, int textmode );
DllExport PerlIO* win32_popen( const char *command, const char *mode );
DllExport PerlIO* win32_popenlist(const char *mode, IV narg, SV **args);
@@ -87,7 +88,7 @@ DllExport int win32_isatty(int fd);
DllExport int win32_read(int fd, void *buf, unsigned int cnt);
DllExport int win32_write(int fd, const void *buf, unsigned int cnt);
DllExport int win32_spawnvp(int mode, const char *cmdname,
- const char *const *argv);
+ const char *const *argv);
DllExport int win32_mkdir(const char *dir, int mode);
DllExport int win32_rmdir(const char *dir);
DllExport int win32_chdir(const char *dir);
@@ -136,6 +137,8 @@ DllExport char* win32_longpath(char *path);
DllExport char* win32_ansipath(const WCHAR *path);
DllExport int win32_ioctl(int i, unsigned int u, char *data);
DllExport int win32_link(const char *oldname, const char *newname);
+DllExport int win32_symlink(const char *oldname, const char *newname);
+DllExport int win32_readlink(const char *path, char *buf, size_t bufsiz);
DllExport int win32_unlink(const char *f);
DllExport int win32_utime(const char *f, struct utimbuf *t);
DllExport int win32_gettimeofday(struct timeval *tp, void *not_used);
@@ -241,6 +244,7 @@ END_EXTERN_C
# undef stat
#endif
#define stat(pth,bufptr) win32_stat(pth,bufptr)
+#define lstat(pth,bufptr) win32_lstat(pth,bufptr)
#define longpath(pth) win32_longpath(pth)
#define ansipath(pth) win32_ansipath(pth)
#define rename(old,new) win32_rename(old,new)
@@ -285,7 +289,6 @@ END_EXTERN_C
#define access(p,m) win32_access(p,m)
#define chmod(p,m) win32_chmod(p,m)
-
#if !defined(MYMALLOC) || !defined(PERL_CORE)
#undef malloc
#undef calloc
@@ -307,6 +310,8 @@ END_EXTERN_C
#define times win32_times
#define ioctl win32_ioctl
#define link win32_link
+#define symlink win32_symlink
+#define readlink win32_readlink
#define unlink win32_unlink
#define utime win32_utime
#define gettimeofday win32_gettimeofday
diff --git a/Master/tlpkg/tlperl/lib/CORE/win32thread.h b/Master/tlpkg/tlperl/lib/CORE/win32thread.h
index 9af3aa3ea2b..9306157c1cd 100644
--- a/Master/tlpkg/tlperl/lib/CORE/win32thread.h
+++ b/Master/tlpkg/tlperl/lib/CORE/win32thread.h
@@ -24,26 +24,26 @@ typedef CRITICAL_SECTION perl_mutex;
typedef HANDLE perl_mutex;
# define MUTEX_INIT(m) \
STMT_START { \
- if ((*(m) = CreateMutex(NULL,FALSE,NULL)) == NULL) \
- Perl_croak_nocontext("panic: MUTEX_INIT"); \
+ if ((*(m) = CreateMutex(NULL,FALSE,NULL)) == NULL) \
+ Perl_croak_nocontext("panic: MUTEX_INIT"); \
} STMT_END
# define MUTEX_LOCK(m) \
STMT_START { \
- if (WaitForSingleObject(*(m),INFINITE) == WAIT_FAILED) \
- Perl_croak_nocontext("panic: MUTEX_LOCK"); \
+ if (WaitForSingleObject(*(m),INFINITE) == WAIT_FAILED) \
+ Perl_croak_nocontext("panic: MUTEX_LOCK"); \
} STMT_END
# define MUTEX_UNLOCK(m) \
STMT_START { \
- if (ReleaseMutex(*(m)) == 0) \
- Perl_croak_nocontext("panic: MUTEX_UNLOCK"); \
+ if (ReleaseMutex(*(m)) == 0) \
+ Perl_croak_nocontext("panic: MUTEX_UNLOCK"); \
} STMT_END
# define MUTEX_DESTROY(m) \
STMT_START { \
- if (CloseHandle(*(m)) == 0) \
- Perl_croak_nocontext("panic: MUTEX_DESTROY"); \
+ if (CloseHandle(*(m)) == 0) \
+ Perl_croak_nocontext("panic: MUTEX_DESTROY"); \
} STMT_END
#endif
@@ -54,59 +54,56 @@ typedef HANDLE perl_mutex;
*/
#define COND_INIT(c) \
STMT_START { \
- (c)->waiters = 0; \
- (c)->sem = Win_CreateSemaphore(NULL,0,LONG_MAX,NULL); \
- if ((c)->sem == NULL) \
- Perl_croak_nocontext("panic: COND_INIT (%ld)",GetLastError()); \
+ (c)->waiters = 0; \
+ (c)->sem = Win_CreateSemaphore(NULL,0,LONG_MAX,NULL); \
+ if ((c)->sem == NULL) \
+ Perl_croak_nocontext("panic: COND_INIT (%ld)",GetLastError()); \
} STMT_END
#define COND_SIGNAL(c) \
STMT_START { \
- if ((c)->waiters > 0 && \
- ReleaseSemaphore((c)->sem,1,NULL) == 0) \
- Perl_croak_nocontext("panic: COND_SIGNAL (%ld)",GetLastError()); \
+ if ((c)->waiters > 0 && \
+ ReleaseSemaphore((c)->sem,1,NULL) == 0) \
+ Perl_croak_nocontext("panic: COND_SIGNAL (%ld)",GetLastError()); \
} STMT_END
#define COND_BROADCAST(c) \
STMT_START { \
- if ((c)->waiters > 0 && \
- ReleaseSemaphore((c)->sem,(c)->waiters,NULL) == 0) \
- Perl_croak_nocontext("panic: COND_BROADCAST (%ld)",GetLastError());\
+ if ((c)->waiters > 0 && \
+ ReleaseSemaphore((c)->sem,(c)->waiters,NULL) == 0) \
+ Perl_croak_nocontext("panic: COND_BROADCAST (%ld)",GetLastError());\
} STMT_END
#define COND_WAIT(c, m) \
STMT_START { \
- (c)->waiters++; \
- MUTEX_UNLOCK(m); \
- /* Note that there's no race here, since a \
- * COND_BROADCAST() on another thread will have seen the\
- * right number of waiters (i.e. including this one) */ \
- if (WaitForSingleObject((c)->sem,INFINITE)==WAIT_FAILED)\
- Perl_croak_nocontext("panic: COND_WAIT (%ld)",GetLastError()); \
- /* XXX there may be an inconsequential race here */ \
- MUTEX_LOCK(m); \
- (c)->waiters--; \
+ (c)->waiters++; \
+ MUTEX_UNLOCK(m); \
+ /* Note that there's no race here, since a \
+ * COND_BROADCAST() on another thread will have seen the\
+ * right number of waiters (i.e. including this one) */ \
+ if (WaitForSingleObject((c)->sem,INFINITE)==WAIT_FAILED)\
+ Perl_croak_nocontext("panic: COND_WAIT (%ld)",GetLastError()); \
+ /* XXX there may be an inconsequential race here */ \
+ MUTEX_LOCK(m); \
+ (c)->waiters--; \
} STMT_END
#define COND_DESTROY(c) \
STMT_START { \
- (c)->waiters = 0; \
- if (CloseHandle((c)->sem) == 0) \
- Perl_croak_nocontext("panic: COND_DESTROY (%ld)",GetLastError()); \
+ (c)->waiters = 0; \
+ if (CloseHandle((c)->sem) == 0) \
+ Perl_croak_nocontext("panic: COND_DESTROY (%ld)",GetLastError()); \
} STMT_END
#define DETACH(t) \
STMT_START { \
- if (CloseHandle((t)->self) == 0) { \
- MUTEX_UNLOCK(&(t)->mutex); \
- Perl_croak_nocontext("panic: DETACH"); \
- } \
+ if (CloseHandle((t)->self) == 0) { \
+ MUTEX_UNLOCK(&(t)->mutex); \
+ Perl_croak_nocontext("panic: DETACH"); \
+ } \
} STMT_END
-#define THREAD_CREATE(t, f) Perl_thread_create(t, f)
-#define THREAD_POST_CREATE(t) NOOP
-
/* XXX Docs mention that the RTL versions of thread creation routines
* should be used, but that advice only seems applicable when the RTL
* is not in a DLL. RTL DLLs seem to do all of the init/deinit required
@@ -124,15 +121,12 @@ typedef HANDLE perl_mutex;
# include <process.h>
# if defined (_MSC_VER)
# define THREAD_RET_TYPE unsigned __stdcall
-# define THREAD_RET_CAST(p) ((unsigned)(p))
# else
/* CRTDLL.DLL doesn't allow a return value from thread function! */
# define THREAD_RET_TYPE void __cdecl
-# define THREAD_RET_CAST(p) ((void)(thr->i.retv = (void *)(p)))
# endif
#else /* !USE_RTL_THREAD_API */
# define THREAD_RET_TYPE DWORD WINAPI
-# define THREAD_RET_CAST(p) ((DWORD)(p))
#endif /* !USE_RTL_THREAD_API */
typedef THREAD_RET_TYPE thread_func_t(void *);
@@ -154,15 +148,15 @@ END_EXTERN_C
#define INIT_THREADS NOOP
#define ALLOC_THREAD_KEY \
STMT_START { \
- if ((PL_thr_key = TlsAlloc()) == TLS_OUT_OF_INDEXES) { \
- PerlIO_printf(PerlIO_stderr(),"panic: TlsAlloc"); \
- exit(1); \
- } \
+ if ((PL_thr_key = TlsAlloc()) == TLS_OUT_OF_INDEXES) { \
+ PerlIO_printf(PerlIO_stderr(),"panic: TlsAlloc"); \
+ exit(1); \
+ } \
} STMT_END
#define FREE_THREAD_KEY \
STMT_START { \
- TlsFree(PL_thr_key); \
+ TlsFree(PL_thr_key); \
} STMT_END
#define PTHREAD_ATFORK(prepare,parent,child) NOOP
@@ -170,19 +164,19 @@ END_EXTERN_C
#if defined(USE_RTL_THREAD_API) && !defined(_MSC_VER)
#define JOIN(t, avp) \
STMT_START { \
- if ((WaitForSingleObject((t)->self,INFINITE) == WAIT_FAILED) \
- || (GetExitCodeThread((t)->self,(LPDWORD)(avp)) == 0) \
- || (CloseHandle((t)->self) == 0)) \
- Perl_croak_nocontext("panic: JOIN"); \
- *avp = (AV *)((t)->i.retv); \
+ if ((WaitForSingleObject((t)->self,INFINITE) == WAIT_FAILED) \
+ || (GetExitCodeThread((t)->self,(LPDWORD)(avp)) == 0) \
+ || (CloseHandle((t)->self) == 0)) \
+ Perl_croak_nocontext("panic: JOIN"); \
+ *avp = (AV *)((t)->i.retv); \
} STMT_END
#else /* !USE_RTL_THREAD_API || _MSC_VER */
#define JOIN(t, avp) \
STMT_START { \
- if ((WaitForSingleObject((t)->self,INFINITE) == WAIT_FAILED) \
- || (GetExitCodeThread((t)->self,(LPDWORD)(avp)) == 0) \
- || (CloseHandle((t)->self) == 0)) \
- Perl_croak_nocontext("panic: JOIN"); \
+ if ((WaitForSingleObject((t)->self,INFINITE) == WAIT_FAILED) \
+ || (GetExitCodeThread((t)->self,(LPDWORD)(avp)) == 0) \
+ || (CloseHandle((t)->self) == 0)) \
+ Perl_croak_nocontext("panic: JOIN"); \
} STMT_END
#endif /* !USE_RTL_THREAD_API || _MSC_VER */
diff --git a/Master/tlpkg/tlperl/lib/CORE/zaphod32_hash.h b/Master/tlpkg/tlperl/lib/CORE/zaphod32_hash.h
index 2fb391a2337..8b15adfb454 100644
--- a/Master/tlpkg/tlperl/lib/CORE/zaphod32_hash.h
+++ b/Master/tlpkg/tlperl/lib/CORE/zaphod32_hash.h
@@ -38,7 +38,7 @@
#endif
#endif
-#ifndef PERL_SEEN_HV_FUNC_H
+#ifndef PERL_SEEN_HV_FUNC_H_
#if !defined(U64)
#include <stdint.h>
#define U64 uint64_t
@@ -145,7 +145,7 @@ void zaphod32_seed_state (
if (!state[0]) state[0] = 1;
if (!state[1]) state[1] = 2;
if (!state[2]) state[2] = 4;
- /* these are pseduo-randomly selected primes between 2**31 and 2**32
+ /* these are pseudo-randomly selected primes between 2**31 and 2**32
* (I generated a big list and then randomly chose some from the list) */
ZAPHOD32_SCRAMBLE32(state[0],0x9fade23b);
ZAPHOD32_SCRAMBLE32(state[1],0xaa6f908d);