This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Remove full stop in the 'try' feature heading
[perl5.git] / handy.h
1 /*    handy.h
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2000,
4  *    2001, 2002, 2004, 2005, 2006, 2007, 2008, 2012 by Larry Wall and others
5  *
6  *    You may distribute under the terms of either the GNU General Public
7  *    License or the Artistic License, as specified in the README file.
8  *
9  */
10
11 /* IMPORTANT NOTE: Everything whose name begins with an underscore is for
12  * internal core Perl use only. */
13
14 #ifndef PERL_HANDY_H_ /* Guard against nested #inclusion */
15 #define PERL_HANDY_H_
16
17 #ifndef PERL_CORE
18 #  define Null(type) ((type)NULL)
19
20 /*
21 =for apidoc_section $string
22 =for apidoc AmnU||Nullch
23 Null character pointer.  (No longer available when C<PERL_CORE> is
24 defined.)
25
26 =for apidoc_section $SV
27 =for apidoc AmnU||Nullsv
28 Null SV pointer.  (No longer available when C<PERL_CORE> is defined.)
29
30 =cut
31
32 Below are signatures of functions from config.h which can't easily be gleaned
33 from it, and are very unlikely to change
34
35 =for apidoc_section $signals
36 =for apidoc Am|int|Sigsetjmp|jmp_buf env|int savesigs
37 =for apidoc Am|void|Siglongjmp|jmp_buf env|int val
38
39 =for apidoc_section $filesystem
40 =for apidoc Am|void *|FILE_ptr|FILE * f
41 =for apidoc Am|Size_t|FILE_cnt|FILE * f
42 =for apidoc Am|void *|FILE_base|FILE * f
43 =for apidoc Am|Size_t|FILE_bufsiz|FILE *f
44
45 =for apidoc_section $string
46 =for apidoc Amu|token|CAT2|token x|token y
47 =for apidoc Amu|string|STRINGIFY|token x
48
49 =for apidoc_section $numeric
50 =for apidoc Am|double|Drand01
51 =for apidoc Am|void|seedDrand01|Rand_seed_t x
52 =for apidoc Am|char *|Gconvert|double x|Size_t n|bool t|char * b
53
54 =cut
55 */
56
57 #  define Nullch Null(char*)
58 #  define Nullfp Null(PerlIO*)
59 #  define Nullsv Null(SV*)
60 #endif
61
62 #ifdef TRUE
63 #undef TRUE
64 #endif
65 #ifdef FALSE
66 #undef FALSE
67 #endif
68 #define TRUE (1)
69 #define FALSE (0)
70
71 /*
72 =for apidoc_section $SV
73 =for apidoc   Am |AV *  |MUTABLE_AV |AV * p
74 =for apidoc_item |CV *  |MUTABLE_CV |CV * p
75 =for apidoc_item |GV *  |MUTABLE_GV |GV * p
76 =for apidoc_item |HV *  |MUTABLE_HV |HV * p
77 =for apidoc_item |IO *  |MUTABLE_IO |IO * p
78 =for apidoc_item |void *|MUTABLE_PTR|void * p
79 =for apidoc_item |SV *  |MUTABLE_SV |SV * p
80
81 The C<MUTABLE_I<*>>() macros cast pointers to the types shown, in such a way
82 (compiler permitting) that casting away const-ness will give a warning;
83 e.g.:
84
85  const SV *sv = ...;
86  AV *av1 = (AV*)sv;        <== BAD:  the const has been silently
87                                      cast away
88  AV *av2 = MUTABLE_AV(sv); <== GOOD: it may warn
89
90 C<MUTABLE_PTR> is the base macro used to derive new casts.  The other
91 already-built-in ones return pointers to what their names indicate.
92
93 =cut
94
95 The brace group version will raise a diagnostic if 'p' is const; the other
96 blindly casts away const.
97  */
98 #if defined(PERL_USE_GCC_BRACE_GROUPS)
99 #  define MUTABLE_PTR(p) ({ void *p_ = (p); p_; })
100 #else
101 #  define MUTABLE_PTR(p) ((void *) (p))
102 #endif
103
104 #define MUTABLE_AV(p)   ((AV *)MUTABLE_PTR(p))
105 #define MUTABLE_CV(p)   ((CV *)MUTABLE_PTR(p))
106 #define MUTABLE_GV(p)   ((GV *)MUTABLE_PTR(p))
107 #define MUTABLE_HV(p)   ((HV *)MUTABLE_PTR(p))
108 #define MUTABLE_IO(p)   ((IO *)MUTABLE_PTR(p))
109 #define MUTABLE_SV(p)   ((SV *)MUTABLE_PTR(p))
110
111 /*
112 =for apidoc_section $SV
113 =for apidoc   Am |AV *|AV_FROM_REF|SV * ref
114 =for apidoc_item |CV *|CV_FROM_REF|SV * ref
115 =for apidoc_item |HV *|HV_FROM_REF|SV * ref
116
117 The C<I<*>V_FROM_REF> macros extract the C<SvRV()> from a given reference SV
118 and return a suitably-cast to pointer to the referenced SV. When running
119 under C<-DDEBUGGING>, assertions are also applied that check that I<ref> is
120 definitely a reference SV that refers to an SV of the right type.
121
122 =cut
123 */
124
125 #if defined(DEBUGGING) && defined(PERL_USE_GCC_BRACE_GROUPS)
126 #  define xV_FROM_REF(XV, ref)  \
127     ({ SV *_ref = ref; \
128        assert(SvROK(_ref)); \
129        assert(SvTYPE(SvRV(_ref)) == SVt_PV ## XV); \
130        (XV *)(SvRV(_ref)); })
131 #else
132 #  define xV_FROM_REF(XV, ref)  ((XV *)(SvRV(ref)))
133 #endif
134
135 #define AV_FROM_REF(ref)  xV_FROM_REF(AV, ref)
136 #define CV_FROM_REF(ref)  xV_FROM_REF(CV, ref)
137 #define HV_FROM_REF(ref)  xV_FROM_REF(HV, ref)
138
139 #ifndef __cplusplus
140 #  include <stdbool.h>
141 #endif
142
143 /*
144 =for apidoc_section $casting
145 =for apidoc Am|bool|cBOOL|bool expr
146
147 Cast-to-bool.  When Perl was able to be compiled on pre-C99 compilers, a
148 C<(bool)> cast didn't necessarily do the right thing, so this macro was
149 created (and made somewhat complicated to work around bugs in old
150 compilers).  Now, many years later, and C99 is used, this is no longer
151 required, but is kept for backwards compatibility.
152
153 =cut
154 */
155 #define cBOOL(cbool) ((bool) (cbool))
156
157 /* Try to figure out __func__ or __FUNCTION__ equivalent, if any.
158  * XXX Should really be a Configure probe, with HAS__FUNCTION__
159  *     and FUNCTION__ as results.
160  * XXX Similarly, a Configure probe for __FILE__ and __LINE__ is needed. */
161 #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (defined(__SUNPRO_C)) /* C99 or close enough. */
162 #  define FUNCTION__ __func__
163 #  define SAFE_FUNCTION__ __func__
164 #elif (defined(__DECC_VER)) /* Tru64 or VMS, and strict C89 being used, but not modern enough cc (in Tru64, -c99 not known, only -std1). */
165 #  define FUNCTION__ ("")
166 #  define SAFE_FUNCTION__ ("UNKNOWN")
167 #else
168 #  define FUNCTION__ __FUNCTION__ /* Common extension. */
169 #  define SAFE_FUNCTION__ __FUNCTION__ /* Common extension. */
170 #endif
171
172 /* XXX A note on the perl source internal type system.  The
173    original intent was that I32 be *exactly* 32 bits.
174
175    Currently, we only guarantee that I32 is *at least* 32 bits.
176    Specifically, if int is 64 bits, then so is I32.  (This is the case
177    for the Cray.)  This has the advantage of meshing nicely with
178    standard library calls (where we pass an I32 and the library is
179    expecting an int), but the disadvantage that an I32 is not 32 bits.
180    Andy Dougherty       August 1996
181
182    There is no guarantee that there is *any* integral type with
183    exactly 32 bits.  It is perfectly legal for a system to have
184    sizeof(short) == sizeof(int) == sizeof(long) == 8.
185
186    Similarly, there is no guarantee that I16 and U16 have exactly 16
187    bits.
188
189    For dealing with issues that may arise from various 32/64-bit
190    systems, we will ask Configure to check out
191
192         SHORTSIZE == sizeof(short)
193         INTSIZE == sizeof(int)
194         LONGSIZE == sizeof(long)
195         LONGLONGSIZE == sizeof(long long) (if HAS_LONG_LONG)
196         PTRSIZE == sizeof(void *)
197         DOUBLESIZE == sizeof(double)
198         LONG_DOUBLESIZE == sizeof(long double) (if HAS_LONG_DOUBLE).
199
200 */
201
202 #ifdef I_INTTYPES /* e.g. Linux has int64_t without <inttypes.h> */
203 #   include <inttypes.h>
204 #   ifdef INT32_MIN_BROKEN
205 #       undef  INT32_MIN
206 #       define INT32_MIN (-2147483647-1)
207 #   endif
208 #   ifdef INT64_MIN_BROKEN
209 #       undef  INT64_MIN
210 #       define INT64_MIN (-9223372036854775807LL-1)
211 #   endif
212 #endif
213
214 typedef I8TYPE I8;
215 typedef U8TYPE U8;
216 typedef I16TYPE I16;
217 typedef U16TYPE U16;
218 typedef I32TYPE I32;
219 typedef U32TYPE U32;
220
221 #ifdef QUADKIND
222 typedef I64TYPE I64;
223 typedef U64TYPE U64;
224 #endif
225
226 /* I8_MAX and I8_MIN constants are not defined, as I8 is an ambiguous type.
227    Please search CHAR_MAX in perl.h for further details. */
228 #ifdef UINT8_MAX
229 #  define U8_MAX UINT8_MAX
230 #else
231 #  define U8_MAX PERL_UCHAR_MAX
232 #endif
233 #ifdef UINT8_MIN
234 #  define U8_MIN UINT8_MIN
235 #else
236 #  define U8_MIN PERL_UCHAR_MIN
237 #endif
238
239 #ifdef INT16_MAX
240 #  define I16_MAX INT16_MAX
241 #else
242 #  define I16_MAX PERL_SHORT_MAX
243 #endif
244 #ifdef INT16_MIN
245 #  define I16_MIN INT16_MIN
246 #else
247 #  define I16_MIN PERL_SHORT_MIN
248 #endif
249 #ifdef UINT16_MAX
250 #  define U16_MAX UINT16_MAX
251 #else
252 #  define U16_MAX PERL_USHORT_MAX
253 #endif
254 #ifdef UINT16_MIN
255 #  define U16_MIN UINT16_MIN
256 #else
257 #  define U16_MIN PERL_USHORT_MIN
258 #endif
259
260 #ifdef INT32_MAX
261 #  define I32_MAX INT32_MAX
262 #elif LONGSIZE > 4
263 #  define I32_MAX PERL_INT_MAX
264 #else
265 #  define I32_MAX PERL_LONG_MAX
266 #endif
267 #ifdef INT32_MIN
268 #  define I32_MIN INT32_MIN
269 #elif LONGSIZE > 4
270 #  define I32_MIN PERL_INT_MIN
271 #else
272 #  define I32_MIN PERL_LONG_MIN
273 #endif
274 #ifdef UINT32_MAX
275 #  ifndef UINT32_MAX_BROKEN /* e.g. HP-UX with gcc messes this up */
276 #    define U32_MAX UINT_MAX
277 #  else
278 #    define U32_MAX 4294967295U
279 #  endif
280 #elif LONGSIZE > 4
281 #  define U32_MAX PERL_UINT_MAX
282 #else
283 #  define U32_MAX PERL_ULONG_MAX
284 #endif
285 #ifdef UINT32_MIN
286 #  define U32_MIN UINT32_MIN
287 #elif LONGSIZE > 4
288 #  define U32_MIN PERL_UINT_MIN
289 #else
290 #  define U32_MIN PERL_ULONG_MIN
291 #endif
292
293 /*
294 =for apidoc_section $integer
295 =for apidoc Ay|| PERL_INT_FAST8_T
296 =for apidoc_item PERL_INT_FAST16_T
297 =for apidoc_item PERL_UINT_FAST8_T
298 =for apidoc_item PERL_UINT_FAST16_T
299
300 These are equivalent to the correspondingly-named C99 typedefs on platforms
301 that have those; they evaluate to C<int> and C<unsigned int> on platforms that
302 don't, so that you can portably take advantage of this C99 feature.
303
304 =cut
305 */
306 #ifdef I_STDINT
307     typedef  int_fast8_t  PERL_INT_FAST8_T;
308     typedef uint_fast8_t  PERL_UINT_FAST8_T;
309     typedef  int_fast16_t PERL_INT_FAST16_T;
310     typedef uint_fast16_t PERL_UINT_FAST16_T;
311 #else
312     typedef int           PERL_INT_FAST8_T;
313     typedef unsigned int  PERL_UINT_FAST8_T;
314     typedef int           PERL_INT_FAST16_T;
315     typedef unsigned int  PERL_UINT_FAST16_T;
316 #endif
317
318 /* log(2) (i.e., log base 10 of 2) is pretty close to 0.30103, just in case
319  * anyone is grepping for it.  So BIT_DIGITS gives the number of decimal digits
320  * required to represent any possible unsigned number containing N bits.
321  * TYPE_DIGITS gives the number of decimal digits required to represent any
322  * possible unsigned number of type T. */
323 #define BIT_DIGITS(N)   (((N)*146)/485 + 1)  /* log10(2) =~ 146/485 */
324 #define TYPE_DIGITS(T)  BIT_DIGITS(sizeof(T) * 8)
325 #define TYPE_CHARS(T)   (TYPE_DIGITS(T) + 2) /* sign, NUL */
326
327 /* Unused by core; should be deprecated */
328 #define Ctl(ch) ((ch) & 037)
329
330 #if defined(PERL_CORE) || defined(PERL_EXT)
331 #  ifndef MIN
332 #    define MIN(a,b) ((a) < (b) ? (a) : (b))
333 #  endif
334 #  ifndef MAX
335 #    define MAX(a,b) ((a) > (b) ? (a) : (b))
336 #  endif
337 #endif
338
339 /* Returns a boolean as to whether the input unsigned number is a power of 2
340  * (2**0, 2**1, etc).  In other words if it has just a single bit set.
341  * If not, subtracting 1 would leave the uppermost bit set, so the & would
342  * yield non-zero */
343 #if defined(PERL_CORE) || defined(PERL_EXT)
344 #  define isPOWER_OF_2(n) ((n) && ((n) & ((n)-1)) == 0)
345 #endif
346
347 /* Returns a mask with the lowest n bits set */
348 #define nBIT_MASK(n) ((UINTMAX_C(1) << (n)) - 1)
349
350 /* The largest unsigned number that will fit into n bits */
351 #define nBIT_UMAX(n)  nBIT_MASK(n)
352
353 /*
354 =for apidoc_section $directives
355 =for apidoc Am||__ASSERT_|bool expr
356
357 This is a helper macro to avoid preprocessor issues, replaced by nothing
358 unless under DEBUGGING, where it expands to an assert of its argument,
359 followed by a comma (hence the comma operator).  If we just used a straight
360 assert(), we would get a comma with nothing before it when not DEBUGGING.
361
362 =cut
363
364 We also use empty definition under Coverity since the __ASSERT_
365 checks often check for things that Really Cannot Happen, and Coverity
366 detects that and gets all excited. */
367
368 #if   defined(DEBUGGING) && !defined(__COVERITY__)                        \
369  && ! defined(PERL_SMALL_MACRO_BUFFER)
370 #   define __ASSERT_(statement)  assert(statement),
371 #else
372 #   define __ASSERT_(statement)
373 #endif
374
375 /*
376 =for apidoc_section $SV
377
378 =for apidoc Ama|SV*|newSVpvs|"literal string"
379 Like C<newSVpvn>, but takes a literal string instead of a
380 string/length pair.
381
382 =for apidoc Ama|SV*|newSVpvs_flags|"literal string"|U32 flags
383 Like C<newSVpvn_flags>, but takes a literal string instead of
384 a string/length pair.
385
386 =for apidoc Ama|SV*|newSVpvs_share|"literal string"
387 Like C<newSVpvn_share>, but takes a literal string instead of
388 a string/length pair and omits the hash parameter.
389
390 =for apidoc Am|void|sv_catpvs_flags|SV* sv|"literal string"|I32 flags
391 Like C<sv_catpvn_flags>, but takes a literal string instead
392 of a string/length pair.
393
394 =for apidoc Am|void|sv_catpvs_nomg|SV* sv|"literal string"
395 Like C<sv_catpvn_nomg>, but takes a literal string instead of
396 a string/length pair.
397
398 =for apidoc Am|void|sv_catpvs|SV* sv|"literal string"
399 Like C<sv_catpvn>, but takes a literal string instead of a
400 string/length pair.
401
402 =for apidoc Am|void|sv_catpvs_mg|SV* sv|"literal string"
403 Like C<sv_catpvn_mg>, but takes a literal string instead of a
404 string/length pair.
405
406 =for apidoc Am|SV *|sv_setref_pvs|SV *const rv|const char *const classname|"literal string"
407 Like C<sv_setref_pvn>, but takes a literal string instead of
408 a string/length pair.
409
410 =for apidoc_section $string
411
412 =for apidoc Ama|char*|savepvs|"literal string"
413 Like C<savepvn>, but takes a literal string instead of a
414 string/length pair.
415
416 =for apidoc Ama|char*|savesharedpvs|"literal string"
417 A version of C<savepvs()> which allocates the duplicate string in memory
418 which is shared between threads.
419
420 =for apidoc_section $GV
421
422 =for apidoc Am|HV*|gv_stashpvs|"name"|I32 create
423 Like C<gv_stashpvn>, but takes a literal string instead of a
424 string/length pair.
425
426 =for apidoc_section $HV
427
428 =for apidoc Am|SV**|hv_fetchs|HV* tb|"key"|I32 lval
429 Like C<hv_fetch>, but takes a literal string instead of a
430 string/length pair.
431 =for apidoc_section $lexer
432
433 =for apidoc Amx|void|lex_stuff_pvs|"pv"|U32 flags
434
435 Like L</lex_stuff_pvn>, but takes a literal string instead of
436 a string/length pair.
437
438 =cut
439 */
440
441 #define ASSERT_IS_LITERAL(s) ("" s "")
442
443 /*
444 =for apidoc_section $string
445
446 =for apidoc Amu|pair|STR_WITH_LEN|"literal string"
447
448 Returns two comma separated tokens of the input literal string, and its length.
449 This is convenience macro which helps out in some API calls.
450 Note that it can't be used as an argument to macros or functions that under
451 some configurations might be macros, which means that it requires the full
452 Perl_xxx(aTHX_ ...) form for any API calls where it's used.
453
454 =cut
455 */
456
457 #define STR_WITH_LEN(s)  ASSERT_IS_LITERAL(s), (sizeof(s)-1)
458
459 /* STR_WITH_LEN() shortcuts */
460 #define newSVpvs(str) Perl_newSVpvn(aTHX_ STR_WITH_LEN(str))
461 #define newSVpvs_flags(str,flags)       \
462     Perl_newSVpvn_flags(aTHX_ STR_WITH_LEN(str), flags)
463 #define newSVpvs_share(str) Perl_newSVpvn_share(aTHX_ STR_WITH_LEN(str), 0)
464 #define sv_catpvs_flags(sv, str, flags) \
465     Perl_sv_catpvn_flags(aTHX_ sv, STR_WITH_LEN(str), flags)
466 #define sv_catpvs_nomg(sv, str) \
467     Perl_sv_catpvn_flags(aTHX_ sv, STR_WITH_LEN(str), 0)
468 #define sv_catpvs(sv, str) \
469     Perl_sv_catpvn_flags(aTHX_ sv, STR_WITH_LEN(str), SV_GMAGIC)
470 #define sv_catpvs_mg(sv, str) \
471     Perl_sv_catpvn_flags(aTHX_ sv, STR_WITH_LEN(str), SV_GMAGIC|SV_SMAGIC)
472 #define sv_setpvs(sv, str) Perl_sv_setpvn(aTHX_ sv, STR_WITH_LEN(str))
473 #define sv_setpvs_mg(sv, str) Perl_sv_setpvn_mg(aTHX_ sv, STR_WITH_LEN(str))
474 #define sv_setref_pvs(rv, classname, str) \
475     Perl_sv_setref_pvn(aTHX_ rv, classname, STR_WITH_LEN(str))
476 #define savepvs(str) Perl_savepvn(aTHX_ STR_WITH_LEN(str))
477 #define savesharedpvs(str) Perl_savesharedpvn(aTHX_ STR_WITH_LEN(str))
478 #define gv_stashpvs(str, create) \
479     Perl_gv_stashpvn(aTHX_ STR_WITH_LEN(str), create)
480
481 #define gv_fetchpvs(namebeg, flags, sv_type) \
482     Perl_gv_fetchpvn_flags(aTHX_ STR_WITH_LEN(namebeg), flags, sv_type)
483 #define  gv_fetchpvn  gv_fetchpvn_flags
484 #define sv_catxmlpvs(dsv, str, utf8) \
485     Perl_sv_catxmlpvn(aTHX_ dsv, STR_WITH_LEN(str), utf8)
486
487
488 #define lex_stuff_pvs(pv,flags) Perl_lex_stuff_pvn(aTHX_ STR_WITH_LEN(pv), flags)
489
490 #define get_cvs(str, flags)                                     \
491         Perl_get_cvn_flags(aTHX_ STR_WITH_LEN(str), (flags))
492
493 /* internal helpers */
494 /* Transitional */
495 #ifndef PERL_VERSION_MAJOR
496 #  define PERL_VERSION_MAJOR  PERL_REVISION
497 #else
498 #  undef  PERL_REVISION     /* We don't want code to be using these */
499 #endif
500 #ifndef PERL_VERSION_MINOR
501 #  define PERL_VERSION_MINOR  PERL_VERSION
502 #else
503 #  undef  PERL_VERSION
504 #endif
505 #ifndef PERL_VERSION_PATCH
506 #  define PERL_VERSION_PATCH  PERL_SUBVERSION
507 #else
508 #  undef  PERL_SUBVERSION
509 #endif
510
511 #define PERL_JNP_TO_DECIMAL_(maJor,miNor,Patch)                             \
512             /* '10*' leaves room for things like alpha, beta, releases */   \
513                     (10 * ((maJor) * 1000000) + ((miNor) * 1000) + (Patch))
514 #define PERL_DECIMAL_VERSION_                                               \
515         PERL_JNP_TO_DECIMAL_(PERL_VERSION_MAJOR, PERL_VERSION_MINOR,        \
516                                                         PERL_VERSION_PATCH)
517
518 /*
519 =for apidoc_section $versioning
520 =for apidoc AmR|bool|PERL_VERSION_EQ|const U8 major|const U8 minor|const U8 patch
521 =for apidoc_item PERL_VERSION_GE
522 =for apidoc_item PERL_VERSION_GT
523 =for apidoc_item PERL_VERSION_LE
524 =for apidoc_item PERL_VERSION_LT
525 =for apidoc_item PERL_VERSION_NE
526
527 Returns whether or not the perl currently being compiled has the specified
528 relationship to the perl given by the parameters.  For example,
529
530  #if PERL_VERSION_GT(5,24,2)
531    code that will only be compiled on perls after v5.24.2
532  #else
533    fallback code
534  #endif
535
536 Note that this is usable in making compile-time decisions
537
538 You may use the special value '*' for the final number to mean ALL possible
539 values for it.  Thus,
540
541  #if PERL_VERSION_EQ(5,31,'*')
542
543 means all perls in the 5.31 series.  And
544
545  #if PERL_VERSION_NE(5,24,'*')
546
547 means all perls EXCEPT 5.24 ones.  And
548
549  #if PERL_VERSION_LE(5,9,'*')
550
551 is effectively
552
553  #if PERL_VERSION_LT(5,10,0)
554
555 This means you don't have to think so much when converting from the existing
556 deprecated C<PERL_VERSION> to using this macro:
557
558  #if PERL_VERSION <= 9
559
560 becomes
561
562  #if PERL_VERSION_LE(5,9,'*')
563
564 =cut
565 */
566
567 /* N.B. These don't work if the patch version is 42 or 92, as those are what
568  * '*' is in ASCII and EBCDIC respectively */
569 # define PERL_VERSION_EQ(j,n,p)                                             \
570               (((p) == '*')                                                 \
571                ? (   (j) == PERL_VERSION_MAJOR                              \
572                   && (n) == PERL_VERSION_MINOR)                             \
573                : (PERL_DECIMAL_VERSION_ == PERL_JNP_TO_DECIMAL_(j,n,p)))
574 # define PERL_VERSION_NE(j,n,p) (! PERL_VERSION_EQ(j,n,p))
575
576 # define PERL_VERSION_LT(j,n,p) /* < '*' effectively means < 0 */           \
577     (PERL_DECIMAL_VERSION_ < PERL_JNP_TO_DECIMAL_( (j),                     \
578                                                    (n),                     \
579                                                  (((p) == '*') ? 0 : p)))
580 # define PERL_VERSION_GE(j,n,p)  (! PERL_VERSION_LT(j,n,p))
581
582 # define PERL_VERSION_LE(j,n,p)  /* <= '*' effectively means < n+1 */       \
583     (PERL_DECIMAL_VERSION_ < PERL_JNP_TO_DECIMAL_(                  (j),    \
584                                           (((p) == '*') ? ((n)+1) : (n)),   \
585                                           (((p) == '*') ? 0 : p)))
586 # define PERL_VERSION_GT(j,n,p) (! PERL_VERSION_LE(j,n,p))
587
588 /*
589 =for apidoc_section $string
590
591 =for apidoc Am|bool|strNE|char* s1|char* s2
592 Test two C<NUL>-terminated strings to see if they are different.  Returns true
593 or false.
594
595 =for apidoc Am|bool|strEQ|char* s1|char* s2
596 Test two C<NUL>-terminated strings to see if they are equal.  Returns true or
597 false.
598
599 =for apidoc Am|bool|strLT|char* s1|char* s2
600 Test two C<NUL>-terminated strings to see if the first, C<s1>, is less than the
601 second, C<s2>.  Returns true or false.
602
603 =for apidoc Am|bool|strLE|char* s1|char* s2
604 Test two C<NUL>-terminated strings to see if the first, C<s1>, is less than or
605 equal to the second, C<s2>.  Returns true or false.
606
607 =for apidoc Am|bool|strGT|char* s1|char* s2
608 Test two C<NUL>-terminated strings to see if the first, C<s1>, is greater than
609 the second, C<s2>.  Returns true or false.
610
611 =for apidoc Am|bool|strGE|char* s1|char* s2
612 Test two C<NUL>-terminated strings to see if the first, C<s1>, is greater than
613 or equal to the second, C<s2>.  Returns true or false.
614
615 =for apidoc Am|bool|strnNE|char* s1|char* s2|STRLEN len
616 Test two C<NUL>-terminated strings to see if they are different.  The C<len>
617 parameter indicates the number of bytes to compare.  Returns true or false.  (A
618 wrapper for C<strncmp>).
619
620 =for apidoc Am|bool|strnEQ|char* s1|char* s2|STRLEN len
621 Test two C<NUL>-terminated strings to see if they are equal.  The C<len>
622 parameter indicates the number of bytes to compare.  Returns true or false.  (A
623 wrapper for C<strncmp>).
624
625 =for apidoc Am|bool|memEQ|char* s1|char* s2|STRLEN len
626 Test two buffers (which may contain embedded C<NUL> characters, to see if they
627 are equal.  The C<len> parameter indicates the number of bytes to compare.
628 Returns true or false.  It is undefined behavior if either of the buffers
629 doesn't contain at least C<len> bytes.
630
631 =for apidoc Am|bool|memEQs|char* s1|STRLEN l1|"s2"
632 Like L</memEQ>, but the second string is a literal enclosed in double quotes,
633 C<l1> gives the number of bytes in C<s1>.
634 Returns true or false.
635
636 =for apidoc Am|bool|memNE|char* s1|char* s2|STRLEN len
637 Test two buffers (which may contain embedded C<NUL> characters, to see if they
638 are not equal.  The C<len> parameter indicates the number of bytes to compare.
639 Returns true or false.  It is undefined behavior if either of the buffers
640 doesn't contain at least C<len> bytes.
641
642 =for apidoc Am|bool|memNEs|char* s1|STRLEN l1|"s2"
643 Like L</memNE>, but the second string is a literal enclosed in double quotes,
644 C<l1> gives the number of bytes in C<s1>.
645 Returns true or false.
646
647 =for apidoc Am|bool|memCHRs|"list"|char c
648 Returns the position of the first occurrence of the byte C<c> in the literal
649 string C<"list">, or NULL if C<c> doesn't appear in C<"list">.  All bytes are
650 treated as unsigned char.  Thus this macro can be used to determine if C<c> is
651 in a set of particular characters.  Unlike L<strchr(3)>, it works even if C<c>
652 is C<NUL> (and the set doesn't include C<NUL>).
653
654 =cut
655
656 New macros should use the following conventions for their names (which are
657 based on the underlying C library functions):
658
659   (mem | str n? ) (EQ | NE | LT | GT | GE | (( BEGIN | END ) P? )) l? s?
660
661   Each has two main parameters, string-like operands that are compared
662   against each other, as specified by the macro name.  Some macros may
663   additionally have one or potentially even two length parameters.  If a length
664   parameter applies to both string parameters, it will be positioned third;
665   otherwise any length parameter immediately follows the string parameter it
666   applies to.
667
668   If the prefix to the name is 'str', the string parameter is a pointer to a C
669   language string.  Such a string does not contain embedded NUL bytes; its
670   length may be unknown, but can be calculated by C<strlen()>, since it is
671   terminated by a NUL, which isn't included in its length.
672
673   The optional 'n' following 'str' means that there is a third parameter,
674   giving the maximum number of bytes to look at in each string.  Even if both
675   strings are longer than the length parameter, those extra bytes will be
676   unexamined.
677
678   The 's' suffix means that the 2nd byte string parameter is a literal C
679   double-quoted string.  Its length will automatically be calculated by the
680   macro, so no length parameter will ever be needed for it.
681
682   If the prefix is 'mem', the string parameters don't have to be C strings;
683   they may contain embedded NUL bytes, do not necessarily have a terminating
684   NUL, and their lengths can be known only through other means, which in
685   practice are additional parameter(s) passed to the function.  All 'mem'
686   functions have at least one length parameter.  Barring any 'l' or 's' suffix,
687   there is a single length parameter, in position 3, which applies to both
688   string parameters.  The 's' suffix means, as described above, that the 2nd
689   string is a literal double-quoted C string (hence its length is calculated by
690   the macro, and the length parameter to the function applies just to the first
691   string parameter, and hence is positioned just after it).  An 'l' suffix
692   means that the 2nd string parameter has its own length parameter, and the
693   signature will look like memFOOl(s1, l1, s2, l2).
694
695   BEGIN (and END) are for testing if the 2nd string is an initial (or final)
696   substring  of the 1st string.  'P' if present indicates that the substring
697   must be a "proper" one in tha mathematical sense that the first one must be
698   strictly larger than the 2nd.
699
700 */
701
702
703 #define strNE(s1,s2) (strcmp(s1,s2) != 0)
704 #define strEQ(s1,s2) (strcmp(s1,s2) == 0)
705 #define strLT(s1,s2) (strcmp(s1,s2) < 0)
706 #define strLE(s1,s2) (strcmp(s1,s2) <= 0)
707 #define strGT(s1,s2) (strcmp(s1,s2) > 0)
708 #define strGE(s1,s2) (strcmp(s1,s2) >= 0)
709
710 #define strnNE(s1,s2,l) (strncmp(s1,s2,l) != 0)
711 #define strnEQ(s1,s2,l) (strncmp(s1,s2,l) == 0)
712
713 #define memEQ(s1,s2,l) (memcmp(((const void *) (s1)), ((const void *) (s2)), l) == 0)
714 #define memNE(s1,s2,l) (! memEQ(s1,s2,l))
715
716 /* memEQ and memNE where second comparand is a string constant */
717 #define memEQs(s1, l, s2) \
718         (((sizeof(s2)-1) == (l)) && memEQ((s1), ASSERT_IS_LITERAL(s2), (sizeof(s2)-1)))
719 #define memNEs(s1, l, s2) (! memEQs(s1, l, s2))
720
721 /* Keep these private until we decide it was a good idea */
722 #if defined(PERL_CORE) || defined(PERL_EXT) || defined(PERL_EXT_POSIX)
723
724 #define strBEGINs(s1,s2) (strncmp(s1,ASSERT_IS_LITERAL(s2), sizeof(s2)-1) == 0)
725
726 #define memBEGINs(s1, l, s2)                                                \
727             (   (Ptrdiff_t) (l) >= (Ptrdiff_t) sizeof(s2) - 1               \
728              && memEQ(s1, ASSERT_IS_LITERAL(s2), sizeof(s2)-1))
729 #define memBEGINPs(s1, l, s2)                                               \
730             (   (Ptrdiff_t) (l) > (Ptrdiff_t) sizeof(s2) - 1                \
731              && memEQ(s1, ASSERT_IS_LITERAL(s2), sizeof(s2)-1))
732 #define memENDs(s1, l, s2)                                                  \
733             (   (Ptrdiff_t) (l) >= (Ptrdiff_t) sizeof(s2) - 1               \
734              && memEQ(s1 + (l) - (sizeof(s2) - 1), ASSERT_IS_LITERAL(s2), sizeof(s2)-1))
735 #define memENDPs(s1, l, s2)                                                 \
736             (   (Ptrdiff_t) (l) > (Ptrdiff_t) sizeof(s2)                    \
737              && memEQ(s1 + (l) - (sizeof(s2) - 1), ASSERT_IS_LITERAL(s2), sizeof(s2)-1))
738 #endif  /* End of making macros private */
739
740 #define memLT(s1,s2,l) (memcmp(s1,s2,l) < 0)
741 #define memLE(s1,s2,l) (memcmp(s1,s2,l) <= 0)
742 #define memGT(s1,s2,l) (memcmp(s1,s2,l) > 0)
743 #define memGE(s1,s2,l) (memcmp(s1,s2,l) >= 0)
744
745 #define memCHRs(s1,c) ((const char *) memchr(ASSERT_IS_LITERAL(s1) , c, sizeof(s1)-1))
746
747 /*
748  * Character classes.
749  *
750  * Unfortunately, the introduction of locales means that we
751  * can't trust isupper(), etc. to tell the truth.  And when
752  * it comes to /\w+/ with tainting enabled, we *must* be able
753  * to trust our character classes.
754  *
755  * Therefore, the default tests in the text of Perl will be independent of
756  * locale.  Any code that wants to depend on the current locale will use the
757  * macros that contain _LC in their names
758  */
759
760 #ifdef USE_LOCALE_CTYPE
761 #  ifndef CTYPE256
762 #    define CTYPE256
763 #  endif
764 #endif
765
766 /*
767
768 =head1 Character classification
769 This section is about functions (really macros) that classify characters
770 into types, such as punctuation versus alphabetic, etc.  Most of these are
771 analogous to regular expression character classes.  (See
772 L<perlrecharclass/POSIX Character Classes>.)  There are several variants for
773 each class.  (Not all macros have all variants; each item below lists the
774 ones valid for it.)  None are affected by C<use bytes>, and only the ones
775 with C<LC> in the name are affected by the current locale.
776
777 The base function, e.g., C<isALPHA()>, takes any signed or unsigned value,
778 treating it as a code point, and returns a boolean as to whether or not the
779 character represented by it is (or on non-ASCII platforms, corresponds to) an
780 ASCII character in the named class based on platform, Unicode, and Perl rules.
781 If the input is a number that doesn't fit in an octet, FALSE is returned.
782
783 Variant C<isI<FOO>_A> (e.g., C<isALPHA_A()>) is identical to the base function
784 with no suffix C<"_A">.  This variant is used to emphasize by its name that
785 only ASCII-range characters can return TRUE.
786
787 Variant C<isI<FOO>_L1> imposes the Latin-1 (or EBCDIC equivalent) character set
788 onto the platform.  That is, the code points that are ASCII are unaffected,
789 since ASCII is a subset of Latin-1.  But the non-ASCII code points are treated
790 as if they are Latin-1 characters.  For example, C<isWORDCHAR_L1()> will return
791 true when called with the code point 0xDF, which is a word character in both
792 ASCII and EBCDIC (though it represents different characters in each).
793 If the input is a number that doesn't fit in an octet, FALSE is returned.
794 (Perl's documentation uses a colloquial definition of Latin-1, to include all
795 code points below 256.)
796
797 Variant C<isI<FOO>_uvchr> is exactly like the C<isI<FOO>_L1> variant, for
798 inputs below 256, but if the code point is larger than 255, Unicode rules are
799 used to determine if it is in the character class.  For example,
800 C<isWORDCHAR_uvchr(0x100)> returns TRUE, since 0x100 is LATIN CAPITAL LETTER A
801 WITH MACRON in Unicode, and is a word character.
802
803 Variants C<isI<FOO>_utf8> and C<isI<FOO>_utf8_safe> are like C<isI<FOO>_uvchr>,
804 but are used for UTF-8 encoded strings.  The two forms are different names for
805 the same thing.  Each call to one of these classifies the first character of
806 the string starting at C<p>.  The second parameter, C<e>, points to anywhere in
807 the string beyond the first character, up to one byte past the end of the
808 entire string.  Although both variants are identical, the suffix C<_safe> in
809 one name emphasizes that it will not attempt to read beyond S<C<e - 1>>,
810 provided that the constraint S<C<s E<lt> e>> is true (this is asserted for in
811 C<-DDEBUGGING> builds).  If the UTF-8 for the input character is malformed in
812 some way, the program may croak, or the function may return FALSE, at the
813 discretion of the implementation, and subject to change in future releases.
814
815 Variant C<isI<FOO>_LC> is like the C<isI<FOO>_A> and C<isI<FOO>_L1> variants,
816 but the result is based on the current locale, which is what C<LC> in the name
817 stands for.  If Perl can determine that the current locale is a UTF-8 locale,
818 it uses the published Unicode rules; otherwise, it uses the C library function
819 that gives the named classification.  For example, C<isDIGIT_LC()> when not in
820 a UTF-8 locale returns the result of calling C<isdigit()>.  FALSE is always
821 returned if the input won't fit into an octet.  On some platforms where the C
822 library function is known to be defective, Perl changes its result to follow
823 the POSIX standard's rules.
824
825 Variant C<isI<FOO>_LC_uvchr> acts exactly like C<isI<FOO>_LC> for inputs less
826 than 256, but for larger ones it returns the Unicode classification of the code
827 point.
828
829 Variants C<isI<FOO>_LC_utf8> and C<isI<FOO>_LC_utf8_safe> are like
830 C<isI<FOO>_LC_uvchr>, but are used for UTF-8 encoded strings.  The two forms
831 are different names for the same thing.  Each call to one of these classifies
832 the first character of the string starting at C<p>.  The second parameter,
833 C<e>, points to anywhere in the string beyond the first character, up to one
834 byte past the end of the entire string.  Although both variants are identical,
835 the suffix C<_safe> in one name emphasizes that it will not attempt to read
836 beyond S<C<e - 1>>, provided that the constraint S<C<s E<lt> e>> is true (this
837 is asserted for in C<-DDEBUGGING> builds).  If the UTF-8 for the input
838 character is malformed in some way, the program may croak, or the function may
839 return FALSE, at the discretion of the implementation, and subject to change in
840 future releases.
841
842 =for apidoc Am|bool|isALPHA|UV ch
843 =for apidoc_item ||isALPHA_A|UV ch
844 =for apidoc_item ||isALPHA_LC|UV ch
845 =for apidoc_item ||isALPHA_LC_utf8_safe|U8 * s| U8 *end
846 =for apidoc_item ||isALPHA_LC_uvchr|UV ch
847 =for apidoc_item ||isALPHA_L1|UV ch
848 =for apidoc_item ||isALPHA_utf8|U8 * s|U8 * end
849 =for apidoc_item ||isALPHA_utf8_safe|U8 * s|U8 * end
850 =for apidoc_item ||isALPHA_uvchr|UV ch
851 Returns a boolean indicating whether the specified input is one of C<[A-Za-z]>,
852 analogous to C<m/[[:alpha:]]/>.
853 See the L<top of this section|/Character classification> for an explanation of
854 the variants.
855
856 =cut
857
858 Here and below, we add the prototypes of these macros for downstream programs
859 that would be interested in them, such as Devel::PPPort
860
861 =for apidoc Am|bool|isALPHANUMERIC|UV ch
862 =for apidoc_item ||isALPHANUMERIC_A|UV ch
863 =for apidoc_item ||isALPHANUMERIC_LC|UV ch
864 =for apidoc_item ||isALPHANUMERIC_LC_utf8_safe|U8 * s| U8 *end
865 =for apidoc_item ||isALPHANUMERIC_LC_uvchr|UV ch
866 =for apidoc_item ||isALPHANUMERIC_L1|UV ch
867 =for apidoc_item ||isALPHANUMERIC_utf8|U8 * s|U8 * end
868 =for apidoc_item ||isALPHANUMERIC_utf8_safe|U8 * s|U8 * end
869 =for apidoc_item ||isALPHANUMERIC_uvchr|UV ch
870 Returns a boolean indicating whether the specified character is one of
871 C<[A-Za-z0-9]>, analogous to C<m/[[:alnum:]]/>.
872 See the L<top of this section|/Character classification> for an explanation of
873 the variants.
874
875 =for apidoc Am|bool|isALNUMC|UV ch
876 =for apidoc_item  ||isALNUMC_A|UV ch
877 =for apidoc_item  ||isALNUMC_LC|UV ch
878 =for apidoc_item  ||isALNUMC_LC_uvchr|UV ch
879 =for apidoc_item  ||isALNUMC_L1|UV ch
880 These are discouraged, backward compatibility macros for L</C<isALPHANUMERIC>>.
881 That is, each returns a boolean indicating whether the specified character is
882 one of C<[A-Za-z0-9]>, analogous to C<m/[[:alnum:]]/>.
883
884 The C<C> suffix in the names was meant to indicate that they correspond to the
885 C language L<C<isalnum(3)>>.
886
887 =for apidoc Am|bool|isASCII|UV ch
888 =for apidoc_item ||isASCII_A|UV ch
889 =for apidoc_item ||isASCII_LC|UV ch
890 =for apidoc_item ||isASCII_LC_utf8_safe|U8 * s| U8 *end
891 =for apidoc_item ||isASCII_LC_uvchr|UV ch
892 =for apidoc_item ||isASCII_L1|UV ch
893 =for apidoc_item ||isASCII_utf8|U8 * s|U8 * end
894 =for apidoc_item ||isASCII_utf8_safe|U8 * s|U8 * end
895 =for apidoc_item ||isASCII_uvchr|UV ch
896 Returns a boolean indicating whether the specified character is one of the 128
897 characters in the ASCII character set, analogous to C<m/[[:ascii:]]/>.
898 On non-ASCII platforms, it returns TRUE iff this
899 character corresponds to an ASCII character.  Variants C<isASCII_A()> and
900 C<isASCII_L1()> are identical to C<isASCII()>.
901 See the L<top of this section|/Character classification> for an explanation of
902 the variants.
903 Note, however, that some platforms do not have the C library routine
904 C<isascii()>.  In these cases, the variants whose names contain C<LC> are the
905 same as the corresponding ones without.
906
907 Also note, that because all ASCII characters are UTF-8 invariant (meaning they
908 have the exact same representation (always a single byte) whether encoded in
909 UTF-8 or not), C<isASCII> will give the correct results when called with any
910 byte in any string encoded or not in UTF-8.  And similarly C<isASCII_utf8> and
911 C<isASCII_utf8_safe> will work properly on any string encoded or not in UTF-8.
912
913 =for apidoc Am|bool|isBLANK|UV ch
914 =for apidoc_item ||isBLANK_A|UV ch
915 =for apidoc_item ||isBLANK_LC|UV ch
916 =for apidoc_item ||isBLANK_LC_utf8_safe|U8 * s| U8 *end
917 =for apidoc_item ||isBLANK_LC_uvchr|UV ch
918 =for apidoc_item ||isBLANK_L1|UV ch
919 =for apidoc_item ||isBLANK_utf8|U8 * s|U8 * end
920 =for apidoc_item ||isBLANK_utf8_safe|U8 * s|U8 * end
921 =for apidoc_item ||isBLANK_uvchr|UV ch
922 Returns a boolean indicating whether the specified character is a
923 character considered to be a blank, analogous to C<m/[[:blank:]]/>.
924 See the L<top of this section|/Character classification> for an explanation of
925 the variants.
926 Note,
927 however, that some platforms do not have the C library routine
928 C<isblank()>.  In these cases, the variants whose names contain C<LC> are
929 the same as the corresponding ones without.
930
931 =for apidoc Am|bool|isCNTRL|UV ch
932 =for apidoc_item ||isCNTRL_A|UV ch
933 =for apidoc_item ||isCNTRL_LC|UV ch
934 =for apidoc_item ||isCNTRL_LC_utf8_safe|U8 * s| U8 *end
935 =for apidoc_item ||isCNTRL_LC_uvchr|UV ch
936 =for apidoc_item ||isCNTRL_L1|UV ch
937 =for apidoc_item ||isCNTRL_utf8|U8 * s|U8 * end
938 =for apidoc_item ||isCNTRL_utf8_safe|U8 * s|U8 * end
939 =for apidoc_item ||isCNTRL_uvchr|UV ch
940
941 Returns a boolean indicating whether the specified character is a
942 control character, analogous to C<m/[[:cntrl:]]/>.
943 See the L<top of this section|/Character classification> for an explanation of
944 the variants.
945 On EBCDIC platforms, you almost always want to use the C<isCNTRL_L1> variant.
946
947 =for apidoc Am|bool|isDIGIT|UV ch
948 =for apidoc_item ||isDIGIT_A|UV ch
949 =for apidoc_item ||isDIGIT_LC|UV ch
950 =for apidoc_item ||isDIGIT_LC_utf8_safe|U8 * s| U8 *end
951 =for apidoc_item ||isDIGIT_LC_uvchr|UV ch
952 =for apidoc_item ||isDIGIT_L1|UV ch
953 =for apidoc_item ||isDIGIT_utf8|U8 * s|U8 * end
954 =for apidoc_item ||isDIGIT_utf8_safe|U8 * s|U8 * end
955 =for apidoc_item ||isDIGIT_uvchr|UV ch
956
957 Returns a boolean indicating whether the specified character is a
958 digit, analogous to C<m/[[:digit:]]/>.
959 Variants C<isDIGIT_A> and C<isDIGIT_L1> are identical to C<isDIGIT>.
960 See the L<top of this section|/Character classification> for an explanation of
961 the variants.
962
963 =for apidoc Am|bool|isGRAPH|UV ch
964 =for apidoc_item ||isGRAPH_A|UV ch
965 =for apidoc_item ||isGRAPH_LC|UV ch
966 =for apidoc_item ||isGRAPH_LC_utf8_safe|U8 * s| U8 *end
967 =for apidoc_item ||isGRAPH_LC_uvchr|UV ch
968 =for apidoc_item ||isGRAPH_L1|UV ch
969 =for apidoc_item ||isGRAPH_utf8|U8 * s|U8 * end
970 =for apidoc_item ||isGRAPH_utf8_safe|U8 * s|U8 * end
971 =for apidoc_item ||isGRAPH_uvchr|UV ch
972 Returns a boolean indicating whether the specified character is a
973 graphic character, analogous to C<m/[[:graph:]]/>.
974 See the L<top of this section|/Character classification> for an explanation of
975 the variants.
976
977 =for apidoc Am|bool|isLOWER|UV ch
978 =for apidoc_item ||isLOWER_A|UV ch
979 =for apidoc_item ||isLOWER_LC|UV ch
980 =for apidoc_item ||isLOWER_LC_utf8_safe|U8 * s| U8 *end
981 =for apidoc_item ||isLOWER_LC_uvchr|UV ch
982 =for apidoc_item ||isLOWER_L1|UV ch
983 =for apidoc_item ||isLOWER_utf8|U8 * s|U8 * end
984 =for apidoc_item ||isLOWER_utf8_safe|U8 * s|U8 * end
985 =for apidoc_item ||isLOWER_uvchr|UV ch
986 Returns a boolean indicating whether the specified character is a
987 lowercase character, analogous to C<m/[[:lower:]]/>.
988 See the L<top of this section|/Character classification> for an explanation of
989 the variants
990
991 =for apidoc Am|bool|isOCTAL|UV ch
992 =for apidoc_item ||isOCTAL_A|UV ch
993 =for apidoc_item ||isOCTAL_L1|UV ch
994 Returns a boolean indicating whether the specified character is an
995 octal digit, [0-7].
996 The only two variants are C<isOCTAL_A> and C<isOCTAL_L1>; each is identical to
997 C<isOCTAL>.
998
999 =for apidoc Am|bool|isPUNCT|UV ch
1000 =for apidoc_item ||isPUNCT_A|UV ch
1001 =for apidoc_item ||isPUNCT_LC|UV ch
1002 =for apidoc_item ||isPUNCT_LC_utf8_safe|U8 * s| U8 *end
1003 =for apidoc_item ||isPUNCT_LC_uvchr|UV ch
1004 =for apidoc_item ||isPUNCT_L1|UV ch
1005 =for apidoc_item ||isPUNCT_utf8|U8 * s|U8 * end
1006 =for apidoc_item ||isPUNCT_utf8_safe|U8 * s|U8 * end
1007 =for apidoc_item ||isPUNCT_uvchr|UV ch
1008 Returns a boolean indicating whether the specified character is a
1009 punctuation character, analogous to C<m/[[:punct:]]/>.
1010 Note that the definition of what is punctuation isn't as
1011 straightforward as one might desire.  See L<perlrecharclass/POSIX Character
1012 Classes> for details.
1013 See the L<top of this section|/Character classification> for an explanation of
1014 the variants.
1015
1016 =for apidoc Am|bool|isSPACE|UV ch
1017 =for apidoc_item ||isSPACE_A|UV ch
1018 =for apidoc_item ||isSPACE_LC|UV ch
1019 =for apidoc_item ||isSPACE_LC_utf8_safe|U8 * s| U8 *end
1020 =for apidoc_item ||isSPACE_LC_uvchr|UV ch
1021 =for apidoc_item ||isSPACE_L1|UV ch
1022 =for apidoc_item ||isSPACE_utf8|U8 * s|U8 * end
1023 =for apidoc_item ||isSPACE_utf8_safe|U8 * s|U8 * end
1024 =for apidoc_item ||isSPACE_uvchr|UV ch
1025 Returns a boolean indicating whether the specified character is a
1026 whitespace character.  This is analogous
1027 to what C<m/\s/> matches in a regular expression.  Starting in Perl 5.18
1028 this also matches what C<m/[[:space:]]/> does.  Prior to 5.18, only the
1029 locale forms of this macro (the ones with C<LC> in their names) matched
1030 precisely what C<m/[[:space:]]/> does.  In those releases, the only difference,
1031 in the non-locale variants, was that C<isSPACE()> did not match a vertical tab.
1032 (See L</isPSXSPC> for a macro that matches a vertical tab in all releases.)
1033 See the L<top of this section|/Character classification> for an explanation of
1034 the variants.
1035
1036 =for apidoc Am|bool|isPSXSPC|UV ch
1037 =for apidoc_item ||isPSXSPC_A|UV ch
1038 =for apidoc_item ||isPSXSPC_LC|UV ch
1039 =for apidoc_item ||isPSXSPC_LC_utf8_safe|U8 * s| U8 *end
1040 =for apidoc_item ||isPSXSPC_LC_uvchr|UV ch
1041 =for apidoc_item ||isPSXSPC_L1|UV ch
1042 =for apidoc_item ||isPSXSPC_utf8|U8 * s|U8 * end
1043 =for apidoc_item ||isPSXSPC_utf8_safe|U8 * s|U8 * end
1044 =for apidoc_item ||isPSXSPC_uvchr|UV ch
1045 (short for Posix Space)
1046 Starting in 5.18, this is identical in all its forms to the
1047 corresponding C<isSPACE()> macros.
1048 The locale forms of this macro are identical to their corresponding
1049 C<isSPACE()> forms in all Perl releases.  In releases prior to 5.18, the
1050 non-locale forms differ from their C<isSPACE()> forms only in that the
1051 C<isSPACE()> forms don't match a Vertical Tab, and the C<isPSXSPC()> forms do.
1052 Otherwise they are identical.  Thus this macro is analogous to what
1053 C<m/[[:space:]]/> matches in a regular expression.
1054 See the L<top of this section|/Character classification> for an explanation of
1055 the variants.
1056
1057 =for apidoc Am|bool|isUPPER|UV ch
1058 =for apidoc_item ||isUPPER_A|UV ch
1059 =for apidoc_item ||isUPPER_LC|UV ch
1060 =for apidoc_item ||isUPPER_LC_utf8_safe|U8 * s| U8 *end
1061 =for apidoc_item ||isUPPER_LC_uvchr|UV ch
1062 =for apidoc_item ||isUPPER_L1|UV ch
1063 =for apidoc_item ||isUPPER_utf8|U8 * s|U8 * end
1064 =for apidoc_item ||isUPPER_utf8_safe|U8 * s|U8 * end
1065 =for apidoc_item ||isUPPER_uvchr|UV ch
1066 Returns a boolean indicating whether the specified character is an
1067 uppercase character, analogous to C<m/[[:upper:]]/>.
1068 See the L<top of this section|/Character classification> for an explanation of
1069 the variants.
1070
1071 =for apidoc Am|bool|isPRINT|UV ch
1072 =for apidoc_item ||isPRINT_A|UV ch
1073 =for apidoc_item ||isPRINT_LC|UV ch
1074 =for apidoc_item ||isPRINT_LC_utf8_safe|U8 * s| U8 *end
1075 =for apidoc_item ||isPRINT_LC_uvchr|UV ch
1076 =for apidoc_item ||isPRINT_L1|UV ch
1077 =for apidoc_item ||isPRINT_utf8|U8 * s|U8 * end
1078 =for apidoc_item ||isPRINT_utf8_safe|U8 * s|U8 * end
1079 =for apidoc_item ||isPRINT_uvchr|UV ch
1080 Returns a boolean indicating whether the specified character is a
1081 printable character, analogous to C<m/[[:print:]]/>.
1082 See the L<top of this section|/Character classification> for an explanation of
1083 the variants.
1084
1085 =for apidoc Am|bool|isWORDCHAR|UV ch
1086 =for apidoc_item ||isWORDCHAR_A|UV ch
1087 =for apidoc_item ||isWORDCHAR_LC|UV ch
1088 =for apidoc_item ||isWORDCHAR_LC_utf8_safe|U8 * s| U8 *end
1089 =for apidoc_item ||isWORDCHAR_LC_uvchr|UV ch
1090 =for apidoc_item ||isWORDCHAR_L1|UV ch
1091 =for apidoc_item ||isWORDCHAR_utf8|U8 * s|U8 * end
1092 =for apidoc_item ||isWORDCHAR_utf8_safe|U8 * s|U8 * end
1093 =for apidoc_item ||isWORDCHAR_uvchr|UV ch
1094 Returns a boolean indicating whether the specified character is a character
1095 that is a word character, analogous to what C<m/\w/> and C<m/[[:word:]]/> match
1096 in a regular expression.  A word character is an alphabetic character, a
1097 decimal digit, a connecting punctuation character (such as an underscore), or
1098 a "mark" character that attaches to one of those (like some sort of accent).
1099
1100 See the L<top of this section|/Character classification> for an explanation of
1101 the variants.
1102
1103 C<isWORDCHAR_A>, C<isWORDCHAR_L1>, C<isWORDCHAR_uvchr>,
1104 C<isWORDCHAR_LC>, C<isWORDCHAR_LC_uvchr>, C<isWORDCHAR_LC_utf8>, and
1105 C<isWORDCHAR_LC_utf8_safe> are also as described there, but additionally
1106 include the platform's native underscore.
1107
1108 =for apidoc Am|bool|isALNUM         |UV ch
1109 =for apidoc_item  ||isALNUM_A       |UV ch
1110 =for apidoc_item  ||isALNUM_LC      |UV ch
1111 =for apidoc_item  ||isALNUM_LC_uvchr|UV ch
1112 These are each a synonym for their respectively named L</C<isWORDCHAR>>
1113 variant.
1114
1115 They are provided for backward compatibility, even though a word character
1116 includes more than the standard C language meaning of alphanumeric.
1117 To get the C language definition, use the corresponding L</C<isALPHANUMERIC>>
1118 variant.
1119
1120 =for apidoc Am|bool|isXDIGIT|UV ch
1121 =for apidoc_item ||isXDIGIT_A|UV ch
1122 =for apidoc_item ||isXDIGIT_LC|UV ch
1123 =for apidoc_item ||isXDIGIT_LC_utf8_safe|U8 * s| U8 *end
1124 =for apidoc_item ||isXDIGIT_LC_uvchr|UV ch
1125 =for apidoc_item ||isXDIGIT_L1|UV ch
1126 =for apidoc_item ||isXDIGIT_utf8|U8 * s|U8 * end
1127 =for apidoc_item ||isXDIGIT_utf8_safe|U8 * s|U8 * end
1128 =for apidoc_item ||isXDIGIT_uvchr|UV ch
1129 Returns a boolean indicating whether the specified character is a hexadecimal
1130 digit.  In the ASCII range these are C<[0-9A-Fa-f]>.  Variants C<isXDIGIT_A()>
1131 and C<isXDIGIT_L1()> are identical to C<isXDIGIT()>.
1132 See the L<top of this section|/Character classification> for an explanation of
1133 the variants.
1134
1135 =for apidoc Am|bool|isIDFIRST|UV ch
1136 =for apidoc_item ||isIDFIRST_A|UV ch
1137 =for apidoc_item ||isIDFIRST_LC|UV ch
1138 =for apidoc_item ||isIDFIRST_LC_utf8_safe|U8 * s| U8 *end
1139 =for apidoc_item ||isIDFIRST_LC_uvchr|UV ch
1140 =for apidoc_item ||isIDFIRST_L1|UV ch
1141 =for apidoc_item ||isIDFIRST_utf8|U8 * s|U8 * end
1142 =for apidoc_item ||isIDFIRST_utf8_safe|U8 * s|U8 * end
1143 =for apidoc_item ||isIDFIRST_uvchr|UV ch
1144 Returns a boolean indicating whether the specified character can be the first
1145 character of an identifier.  This is very close to, but not quite the same as
1146 the official Unicode property C<XID_Start>.  The difference is that this
1147 returns true only if the input character also matches L</isWORDCHAR>.
1148 See the L<top of this section|/Character classification> for an explanation of
1149 the variants.
1150
1151 =for apidoc Am|bool|isIDCONT|UV ch
1152 =for apidoc_item ||isIDCONT_A|UV ch
1153 =for apidoc_item ||isIDCONT_LC|UV ch
1154 =for apidoc_item ||isIDCONT_LC_utf8_safe|U8 * s| U8 *end
1155 =for apidoc_item ||isIDCONT_LC_uvchr|UV ch
1156 =for apidoc_item ||isIDCONT_L1|UV ch
1157 =for apidoc_item ||isIDCONT_utf8|U8 * s|U8 * end
1158 =for apidoc_item ||isIDCONT_utf8_safe|U8 * s|U8 * end
1159 =for apidoc_item ||isIDCONT_uvchr|UV ch
1160 Returns a boolean indicating whether the specified character can be the
1161 second or succeeding character of an identifier.  This is very close to, but
1162 not quite the same as the official Unicode property C<XID_Continue>.  The
1163 difference is that this returns true only if the input character also matches
1164 L</isWORDCHAR>.  See the L<top of this section|/Character classification> for
1165 an explanation of the variants.
1166
1167 =for apidoc_section $numeric
1168
1169 =for apidoc Am|U8|READ_XDIGIT|char str*
1170 Returns the value of an ASCII-range hex digit and advances the string pointer.
1171 Behaviour is only well defined when isXDIGIT(*str) is true.
1172
1173 =head1 Character case changing
1174 Perl uses "full" Unicode case mappings.  This means that converting a single
1175 character to another case may result in a sequence of more than one character.
1176 For example, the uppercase of C<E<223>> (LATIN SMALL LETTER SHARP S) is the two
1177 character sequence C<SS>.  This presents some complications   The lowercase of
1178 all characters in the range 0..255 is a single character, and thus
1179 C<L</toLOWER_L1>> is furnished.  But, C<toUPPER_L1> can't exist, as it couldn't
1180 return a valid result for all legal inputs.  Instead C<L</toUPPER_uvchr>> has
1181 an API that does allow every possible legal result to be returned.)  Likewise
1182 no other function that is crippled by not being able to give the correct
1183 results for the full range of possible inputs has been implemented here.
1184
1185 =for apidoc Am|UV|toUPPER|UV cp
1186 =for apidoc_item |UV|toUPPER_A|UV cp
1187 =for apidoc_item |UV|toUPPER_utf8|U8* p|U8* e|U8* s|STRLEN* lenp
1188 =for apidoc_item |UV|toUPPER_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
1189 =for apidoc_item |UV|toUPPER_uvchr|UV cp|U8* s|STRLEN* lenp
1190
1191 These all return the uppercase of a character.  The differences are what domain
1192 they operate on, and whether the input is specified as a code point (those
1193 forms with a C<cp> parameter) or as a UTF-8 string (the others).  In the latter
1194 case, the code point to use is the first one in the buffer of UTF-8 encoded
1195 code points, delineated by the arguments S<C<p .. e - 1>>.
1196
1197 C<toUPPER> and C<toUPPER_A> are synonyms of each other.  They return the
1198 uppercase of any lowercase ASCII-range code point.  All other inputs are
1199 returned unchanged.  Since these are macros, the input type may be any integral
1200 one, and the output will occupy the same number of bits as the input.
1201
1202 There is no C<toUPPER_L1> nor C<toUPPER_LATIN1> as the uppercase of some code
1203 points in the 0..255 range is above that range or consists of multiple
1204 characters.  Instead use C<toUPPER_uvchr>.
1205
1206 C<toUPPER_uvchr> returns the uppercase of any Unicode code point.  The return
1207 value is identical to that of C<toUPPER_A> for input code points in the ASCII
1208 range.  The uppercase of the vast majority of Unicode code points is the same
1209 as the code point itself.  For these, and for code points above the legal
1210 Unicode maximum, this returns the input code point unchanged.  It additionally
1211 stores the UTF-8 of the result into the buffer beginning at C<s>, and its
1212 length in bytes into C<*lenp>.  The caller must have made C<s> large enough to
1213 contain at least C<UTF8_MAXBYTES_CASE+1> bytes to avoid possible overflow.
1214
1215 NOTE: the uppercase of a code point may be more than one code point.  The
1216 return value of this function is only the first of these.  The entire uppercase
1217 is returned in C<s>.  To determine if the result is more than a single code
1218 point, you can do something like this:
1219
1220  uc = toUPPER_uvchr(cp, s, &len);
1221  if (len > UTF8SKIP(s)) { is multiple code points }
1222  else { is a single code point }
1223
1224 C<toUPPER_utf8> and C<toUPPER_utf8_safe> are synonyms of each other.  The only
1225 difference between these and C<toUPPER_uvchr> is that the source for these is
1226 encoded in UTF-8, instead of being a code point.  It is passed as a buffer
1227 starting at C<p>, with C<e> pointing to one byte beyond its end.  The C<p>
1228 buffer may certainly contain more than one code point; but only the first one
1229 (up through S<C<e - 1>>) is examined.  If the UTF-8 for the input character is
1230 malformed in some way, the program may croak, or the function may return the
1231 REPLACEMENT CHARACTER, at the discretion of the implementation, and subject to
1232 change in future releases.
1233
1234 =for apidoc Am|UV|toFOLD|UV cp
1235 =for apidoc_item |UV|toFOLD_A|UV cp
1236 =for apidoc_item |UV|toFOLD_utf8|U8* p|U8* e|U8* s|STRLEN* lenp
1237 =for apidoc_item |UV|toFOLD_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
1238 =for apidoc_item |UV|toFOLD_uvchr|UV cp|U8* s|STRLEN* lenp
1239
1240 These all return the foldcase of a character.  "foldcase" is an internal case
1241 for C</i> pattern matching. If the foldcase of character A and the foldcase of
1242 character B are the same, they match caselessly; otherwise they don't.
1243
1244 The differences in the forms are what domain they operate on, and whether the
1245 input is specified as a code point (those forms with a C<cp> parameter) or as a
1246 UTF-8 string (the others).  In the latter case, the code point to use is the
1247 first one in the buffer of UTF-8 encoded code points, delineated by the
1248 arguments S<C<p .. e - 1>>.
1249
1250 C<toFOLD> and C<toFOLD_A> are synonyms of each other.  They return the
1251 foldcase of any ASCII-range code point.  In this range, the foldcase is
1252 identical to the lowercase.  All other inputs are returned unchanged.  Since
1253 these are macros, the input type may be any integral one, and the output will
1254 occupy the same number of bits as the input.
1255
1256 There is no C<toFOLD_L1> nor C<toFOLD_LATIN1> as the foldcase of some code
1257 points in the 0..255 range is above that range or consists of multiple
1258 characters.  Instead use C<toFOLD_uvchr>.
1259
1260 C<toFOLD_uvchr> returns the foldcase of any Unicode code point.  The return
1261 value is identical to that of C<toFOLD_A> for input code points in the ASCII
1262 range.  The foldcase of the vast majority of Unicode code points is the same
1263 as the code point itself.  For these, and for code points above the legal
1264 Unicode maximum, this returns the input code point unchanged.  It additionally
1265 stores the UTF-8 of the result into the buffer beginning at C<s>, and its
1266 length in bytes into C<*lenp>.  The caller must have made C<s> large enough to
1267 contain at least C<UTF8_MAXBYTES_CASE+1> bytes to avoid possible overflow.
1268
1269 NOTE: the foldcase of a code point may be more than one code point.  The
1270 return value of this function is only the first of these.  The entire foldcase
1271 is returned in C<s>.  To determine if the result is more than a single code
1272 point, you can do something like this:
1273
1274  uc = toFOLD_uvchr(cp, s, &len);
1275  if (len > UTF8SKIP(s)) { is multiple code points }
1276  else { is a single code point }
1277
1278 C<toFOLD_utf8> and C<toFOLD_utf8_safe> are synonyms of each other.  The only
1279 difference between these and C<toFOLD_uvchr> is that the source for these is
1280 encoded in UTF-8, instead of being a code point.  It is passed as a buffer
1281 starting at C<p>, with C<e> pointing to one byte beyond its end.  The C<p>
1282 buffer may certainly contain more than one code point; but only the first one
1283 (up through S<C<e - 1>>) is examined.  If the UTF-8 for the input character is
1284 malformed in some way, the program may croak, or the function may return the
1285 REPLACEMENT CHARACTER, at the discretion of the implementation, and subject to
1286 change in future releases.
1287
1288 =for apidoc Am|UV|toLOWER|UV cp
1289 =for apidoc_item |UV|toLOWER_A|UV cp
1290 =for apidoc_item |UV|toLOWER_LATIN1|UV cp
1291 =for apidoc_item |UV|toLOWER_LC|UV cp
1292 =for apidoc_item |UV|toLOWER_L1|UV cp
1293 =for apidoc_item |UV|toLOWER_utf8|U8* p|U8* e|U8* s|STRLEN* lenp
1294 =for apidoc_item |UV|toLOWER_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
1295 =for apidoc_item |UV|toLOWER_uvchr|UV cp|U8* s|STRLEN* lenp
1296
1297 These all return the lowercase of a character.  The differences are what domain
1298 they operate on, and whether the input is specified as a code point (those
1299 forms with a C<cp> parameter) or as a UTF-8 string (the others).  In the latter
1300 case, the code point to use is the first one in the buffer of UTF-8 encoded
1301 code points, delineated by the arguments S<C<p .. e - 1>>.
1302
1303 C<toLOWER> and C<toLOWER_A> are synonyms of each other.  They return the
1304 lowercase of any uppercase ASCII-range code point.  All other inputs are
1305 returned unchanged.  Since these are macros, the input type may be any integral
1306 one, and the output will occupy the same number of bits as the input.
1307
1308 C<toLOWER_L1> and C<toLOWER_LATIN1> are synonyms of each other.  They behave
1309 identically as C<toLOWER> for ASCII-range input.  But additionally will return
1310 the lowercase of any uppercase code point in the entire 0..255 range, assuming
1311 a Latin-1 encoding (or the EBCDIC equivalent on such platforms).
1312
1313 C<toLOWER_LC> returns the lowercase of the input code point according to the
1314 rules of the current POSIX locale.  Input code points outside the range 0..255
1315 are returned unchanged.
1316
1317 C<toLOWER_uvchr> returns the lowercase of any Unicode code point.  The return
1318 value is identical to that of C<toLOWER_L1> for input code points in the 0..255
1319 range.  The lowercase of the vast majority of Unicode code points is the same
1320 as the code point itself.  For these, and for code points above the legal
1321 Unicode maximum, this returns the input code point unchanged.  It additionally
1322 stores the UTF-8 of the result into the buffer beginning at C<s>, and its
1323 length in bytes into C<*lenp>.  The caller must have made C<s> large enough to
1324 contain at least C<UTF8_MAXBYTES_CASE+1> bytes to avoid possible overflow.
1325
1326 NOTE: the lowercase of a code point may be more than one code point.  The
1327 return value of this function is only the first of these.  The entire lowercase
1328 is returned in C<s>.  To determine if the result is more than a single code
1329 point, you can do something like this:
1330
1331  uc = toLOWER_uvchr(cp, s, &len);
1332  if (len > UTF8SKIP(s)) { is multiple code points }
1333  else { is a single code point }
1334
1335 C<toLOWER_utf8> and C<toLOWER_utf8_safe> are synonyms of each other.  The only
1336 difference between these and C<toLOWER_uvchr> is that the source for these is
1337 encoded in UTF-8, instead of being a code point.  It is passed as a buffer
1338 starting at C<p>, with C<e> pointing to one byte beyond its end.  The C<p>
1339 buffer may certainly contain more than one code point; but only the first one
1340 (up through S<C<e - 1>>) is examined.  If the UTF-8 for the input character is
1341 malformed in some way, the program may croak, or the function may return the
1342 REPLACEMENT CHARACTER, at the discretion of the implementation, and subject to
1343 change in future releases.
1344
1345 =for apidoc Am|UV|toTITLE|UV cp
1346 =for apidoc_item |UV|toTITLE_A|UV cp
1347 =for apidoc_item |UV|toTITLE_utf8|U8* p|U8* e|U8* s|STRLEN* lenp
1348 =for apidoc_item |UV|toTITLE_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
1349 =for apidoc_item |UV|toTITLE_uvchr|UV cp|U8* s|STRLEN* lenp
1350
1351 These all return the titlecase of a character.  The differences are what domain
1352 they operate on, and whether the input is specified as a code point (those
1353 forms with a C<cp> parameter) or as a UTF-8 string (the others).  In the latter
1354 case, the code point to use is the first one in the buffer of UTF-8 encoded
1355 code points, delineated by the arguments S<C<p .. e - 1>>.
1356
1357 C<toTITLE> and C<toTITLE_A> are synonyms of each other.  They return the
1358 titlecase of any lowercase ASCII-range code point.  In this range, the
1359 titlecase is identical to the uppercase.  All other inputs are returned
1360 unchanged.  Since these are macros, the input type may be any integral one, and
1361 the output will occupy the same number of bits as the input.
1362
1363 There is no C<toTITLE_L1> nor C<toTITLE_LATIN1> as the titlecase of some code
1364 points in the 0..255 range is above that range or consists of multiple
1365 characters.  Instead use C<toTITLE_uvchr>.
1366
1367 C<toTITLE_uvchr> returns the titlecase of any Unicode code point.  The return
1368 value is identical to that of C<toTITLE_A> for input code points in the ASCII
1369 range.  The titlecase of the vast majority of Unicode code points is the same
1370 as the code point itself.  For these, and for code points above the legal
1371 Unicode maximum, this returns the input code point unchanged.  It additionally
1372 stores the UTF-8 of the result into the buffer beginning at C<s>, and its
1373 length in bytes into C<*lenp>.  The caller must have made C<s> large enough to
1374 contain at least C<UTF8_MAXBYTES_CASE+1> bytes to avoid possible overflow.
1375
1376 NOTE: the titlecase of a code point may be more than one code point.  The
1377 return value of this function is only the first of these.  The entire titlecase
1378 is returned in C<s>.  To determine if the result is more than a single code
1379 point, you can do something like this:
1380
1381  uc = toTITLE_uvchr(cp, s, &len);
1382  if (len > UTF8SKIP(s)) { is multiple code points }
1383  else { is a single code point }
1384
1385 C<toTITLE_utf8> and C<toTITLE_utf8_safe> are synonyms of each other.  The only
1386 difference between these and C<toTITLE_uvchr> is that the source for these is
1387 encoded in UTF-8, instead of being a code point.  It is passed as a buffer
1388 starting at C<p>, with C<e> pointing to one byte beyond its end.  The C<p>
1389 buffer may certainly contain more than one code point; but only the first one
1390 (up through S<C<e - 1>>) is examined.  If the UTF-8 for the input character is
1391 malformed in some way, the program may croak, or the function may return the
1392 REPLACEMENT CHARACTER, at the discretion of the implementation, and subject to
1393 change in future releases.
1394
1395 =cut
1396
1397 XXX Still undocumented isVERTWS_uvchr and _utf8; it's unclear what their names
1398 really should be.  Also toUPPER_LC and toFOLD_LC, which are subject to change,
1399 and aren't general purpose as they don't work on U+DF, and assert against that.
1400 and isCASED_LC, as it really is more of an internal thing.
1401
1402 Note that these macros are repeated in Devel::PPPort, so should also be
1403 patched there.  The file as of this writing is cpan/Devel-PPPort/parts/inc/misc
1404
1405 */
1406
1407 /*
1408    void below because that's the best fit, and works for Devel::PPPort
1409 =for apidoc_section $integer
1410 =for apidoc AyT||WIDEST_UTYPE
1411
1412 Yields the widest unsigned integer type on the platform, currently either
1413 C<U32> or C<U64>.  This can be used in declarations such as
1414
1415  WIDEST_UTYPE my_uv;
1416
1417 or casts
1418
1419  my_uv = (WIDEST_UTYPE) val;
1420
1421 =cut
1422
1423 */
1424 #define WIDEST_UTYPE PERL_UINTMAX_T
1425
1426 /* Where there could be some confusion, use this as a static assert in macros
1427  * to make sure that a parameter isn't a pointer.  But some compilers can't
1428  * handle this.  The only one known so far that doesn't is gcc 3.3.6; the check
1429  * below isn't thorough for such an old compiler, so may have to be revised if
1430  * experience so dictates. */
1431 #if  ! PERL_IS_GCC || PERL_GCC_VERSION_GT(3,3,6)
1432 #  define ASSERT_NOT_PTR(x) ((x) | 0)
1433 #else
1434 #  define ASSERT_NOT_PTR(x) (x)
1435 #endif
1436
1437 /* Likewise, this is effectively a static assert to be used to guarantee the
1438  * parameter is a pointer
1439  *
1440  * NOT suitable for void* 
1441  */
1442 #define ASSERT_IS_PTR(x) (__ASSERT_(sizeof(*(x))) (x))
1443
1444 /* FITS_IN_8_BITS(c) returns true if c doesn't have  a bit set other than in
1445  * the lower 8.  It is designed to be hopefully bomb-proof, making sure that no
1446  * bits of information are lost even on a 64-bit machine, but to get the
1447  * compiler to optimize it out if possible.  This is because Configure makes
1448  * sure that the machine has an 8-bit byte, so if c is stored in a byte, the
1449  * sizeof() guarantees that this evaluates to a constant true at compile time.
1450  *
1451  * For Coverity, be always true, because otherwise Coverity thinks
1452  * it finds several expressions that are always true, independent
1453  * of operands.  Well, they are, but that is kind of the point.
1454  */
1455 #ifndef __COVERITY__
1456   /* The '| 0' part in ASSERT_NOT_PTR ensures a compiler error if c is not
1457    * integer (like e.g., a pointer) */
1458 #  define FITS_IN_8_BITS(c) (   (sizeof(c) == 1)                            \
1459                              || (((WIDEST_UTYPE) ASSERT_NOT_PTR(c)) >> 8) == 0)
1460 #else
1461 #  define FITS_IN_8_BITS(c) (1)
1462 #endif
1463
1464 /* Returns true if l <= c <= (l + n), where 'l' and 'n' are non-negative
1465  * Written this way so that after optimization, only one conditional test is
1466  * needed.  (The NV casts stop any warnings about comparison always being true
1467  * if called with an unsigned.  The cast preserves the sign, which is all we
1468  * care about.) */
1469 #define withinCOUNT(c, l, n)  (__ASSERT_((NV) (l) >= 0)                 \
1470                                __ASSERT_((NV) (n) >= 0)                 \
1471                                withinCOUNT_KNOWN_VALID_((c), (l), (n)))
1472
1473 /* For internal use only, this can be used in places where it is known that the
1474  * parameters to withinCOUNT() are valid, to avoid the asserts.  For example,
1475  * inRANGE() below, calls this several times, but does all the necessary
1476  * asserts itself, once.  The reason that this is necessary is that the
1477  * duplicate asserts were exceeding the internal limits of some compilers */
1478 #define withinCOUNT_KNOWN_VALID_(c, l, n)                                   \
1479     ((((WIDEST_UTYPE) (c)) - ASSERT_NOT_PTR(l))                             \
1480                                    <= ((WIDEST_UTYPE) ASSERT_NOT_PTR(n)))
1481
1482 /* Returns true if c is in the range l..u, where 'l' is non-negative
1483  * Written this way so that after optimization, only one conditional test is
1484  * needed. */
1485 #define inRANGE(c, l, u) (__ASSERT_((NV) (l) >= 0) __ASSERT_((u) >= (l))    \
1486    (  (sizeof(c) == sizeof(U8))  ? inRANGE_helper_(U8, (c), (l), ((u)))     \
1487     : (sizeof(c) == sizeof(U16)) ? inRANGE_helper_(U16,(c), (l), ((u)))     \
1488     : (sizeof(c) == sizeof(U32)) ? inRANGE_helper_(U32,(c), (l), ((u)))     \
1489              : (__ASSERT_(sizeof(c) == sizeof(WIDEST_UTYPE))                \
1490                           inRANGE_helper_(WIDEST_UTYPE,(c), (l), ((u))))))
1491
1492 /* For internal use, this is used by machine-generated code which generates
1493  * known valid calls, with a known sizeof().  This avoids the extra code and
1494  * asserts that were exceeding internal limits of some compilers. */
1495 #define inRANGE_helper_(cast, c, l, u)                                      \
1496                     withinCOUNT_KNOWN_VALID_(((cast) (c)), (l), ((u) - (l)))
1497
1498 #ifdef EBCDIC
1499 #   ifndef _ALL_SOURCE
1500         /* The native libc isascii() et.al. functions return the wrong results
1501          * on at least z/OS unless this is defined. */
1502 #       error   _ALL_SOURCE should probably be defined
1503 #   endif
1504 #else
1505     /* There is a simple definition of ASCII for ASCII platforms.  But the
1506      * EBCDIC one isn't so simple, so is defined using table look-up like the
1507      * other macros below.
1508      *
1509      * The cast here is used instead of '(c) >= 0', because some compilers emit
1510      * a warning that that test is always true when the parameter is an
1511      * unsigned type.  khw supposes that it could be written as
1512      *      && ((c) == '\0' || (c) > 0)
1513      * to avoid the message, but the cast will likely avoid extra branches even
1514      * with stupid compilers. */
1515 #   define isASCII(c)    (((WIDEST_UTYPE) ASSERT_NOT_PTR(c)) < 128)
1516 #endif
1517
1518 /* Take the eight possible bit patterns of the lower 3 bits and you get the
1519  * lower 3 bits of the 8 octal digits, in both ASCII and EBCDIC, so those bits
1520  * can be ignored.  If the rest match '0', we have an octal */
1521 #define isOCTAL_A(c)  ((((WIDEST_UTYPE) ASSERT_NOT_PTR(c)) & ~7) == '0')
1522
1523 #ifdef H_PERL       /* If have access to perl.h, lookup in its table */
1524
1525 /* Character class numbers.  For internal core Perl use only.  The ones less
1526  * than 32 are used in PL_charclass[] and the ones up through the one that
1527  * corresponds to <HIGHEST_REGCOMP_DOT_H_SYNC_> are used by regcomp.h and
1528  * related files.  PL_charclass ones use names used in l1_char_class_tab.h but
1529  * their actual definitions are here.  If that file has a name not used here,
1530  * it won't compile.
1531  *
1532  * The first group of these is ordered in what I (khw) estimate to be the
1533  * frequency of their use.  This gives a slight edge to exiting a loop earlier
1534  * (in reginclass() in regexec.c).  Except \v should be last, as it isn't a
1535  * real Posix character class, and some (small) inefficiencies in regular
1536  * expression handling would be introduced by putting it in the middle of those
1537  * that are.  Also, cntrl and ascii come after the others as it may be useful
1538  * to group these which have no members that match above Latin1, (or above
1539  * ASCII in the latter case) */
1540
1541 #  define CC_WORDCHAR_           0      /* \w and [:word:] */
1542 #  define CC_DIGIT_              1      /* \d and [:digit:] */
1543 #  define CC_ALPHA_              2      /* [:alpha:] */
1544 #  define CC_LOWER_              3      /* [:lower:] */
1545 #  define CC_UPPER_              4      /* [:upper:] */
1546 #  define CC_PUNCT_              5      /* [:punct:] */
1547 #  define CC_PRINT_              6      /* [:print:] */
1548 #  define CC_ALPHANUMERIC_       7      /* [:alnum:] */
1549 #  define CC_GRAPH_              8      /* [:graph:] */
1550 #  define CC_CASED_              9      /* [:lower:] or [:upper:] under /i */
1551 #  define CC_SPACE_             10      /* \s, [:space:] */
1552 #  define CC_BLANK_             11      /* [:blank:] */
1553 #  define CC_XDIGIT_            12      /* [:xdigit:] */
1554 #  define CC_CNTRL_             13      /* [:cntrl:] */
1555 #  define CC_ASCII_             14      /* [:ascii:] */
1556 #  define CC_VERTSPACE_         15      /* \v */
1557
1558 #  define HIGHEST_REGCOMP_DOT_H_SYNC_ CC_VERTSPACE_
1559
1560 /* The members of the third group below do not need to be coordinated with data
1561  * structures in regcomp.[ch] and regexec.c. */
1562 #  define CC_IDFIRST_                  16
1563 #  define CC_CHARNAME_CONT_            17
1564 #  define CC_NONLATIN1_FOLD_           18
1565 #  define CC_NONLATIN1_SIMPLE_FOLD_    19
1566 #  define CC_QUOTEMETA_                20
1567 #  define CC_NON_FINAL_FOLD_           21
1568 #  define CC_IS_IN_SOME_FOLD_          22
1569 #  define CC_BINDIGIT_                 23
1570 #  define CC_OCTDIGIT_                 24
1571 #  define CC_MNEMONIC_CNTRL_           25
1572
1573 /* Unused: 26-31
1574  * If more bits are needed, one could add a second word for non-64bit
1575  * QUAD_IS_INT systems, using some #ifdefs to distinguish between having a 2nd
1576  * word or not.  The IS_IN_SOME_FOLD bit is the most easily expendable, as it
1577  * is used only for optimization (as of this writing), and differs in the
1578  * Latin1 range from the ALPHA bit only in two relatively unimportant
1579  * characters: the masculine and feminine ordinal indicators, so removing it
1580  * would just cause /i regexes which match them to run less efficiently.
1581  * Similarly the EBCDIC-only bits are used just for speed, and could be
1582  * replaced by other means */
1583
1584 #if defined(PERL_CORE) || defined(PERL_EXT)
1585 /* An enum version of the character class numbers, to help compilers
1586  * optimize */
1587 typedef enum {
1588     CC_ENUM_ALPHA_          = CC_ALPHA_,
1589     CC_ENUM_ALPHANUMERIC_   = CC_ALPHANUMERIC_,
1590     CC_ENUM_ASCII_          = CC_ASCII_,
1591     CC_ENUM_BLANK_          = CC_BLANK_,
1592     CC_ENUM_CASED_          = CC_CASED_,
1593     CC_ENUM_CNTRL_          = CC_CNTRL_,
1594     CC_ENUM_DIGIT_          = CC_DIGIT_,
1595     CC_ENUM_GRAPH_          = CC_GRAPH_,
1596     CC_ENUM_LOWER_          = CC_LOWER_,
1597     CC_ENUM_PRINT_          = CC_PRINT_,
1598     CC_ENUM_PUNCT_          = CC_PUNCT_,
1599     CC_ENUM_SPACE_          = CC_SPACE_,
1600     CC_ENUM_UPPER_          = CC_UPPER_,
1601     CC_ENUM_VERTSPACE_      = CC_VERTSPACE_,
1602     CC_ENUM_WORDCHAR_       = CC_WORDCHAR_,
1603     CC_ENUM_XDIGIT_         = CC_XDIGIT_
1604 } char_class_number_;
1605 #endif
1606
1607 #define POSIX_CC_COUNT    (HIGHEST_REGCOMP_DOT_H_SYNC_ + 1)
1608
1609 START_EXTERN_C
1610 #  ifdef DOINIT
1611 EXTCONST  U32 PL_charclass[] = {
1612 #    include "l1_char_class_tab.h"
1613 };
1614
1615 #  else /* ! DOINIT */
1616 EXTCONST U32 PL_charclass[];
1617 #  endif
1618 END_EXTERN_C
1619
1620     /* The 1U keeps Solaris from griping when shifting sets the uppermost bit */
1621 #   define CC_mask_(classnum) (1U << (classnum))
1622
1623     /* For internal core Perl use only: the base macro for defining macros like
1624      * isALPHA */
1625 #   define generic_isCC_(c, classnum) cBOOL(FITS_IN_8_BITS(c)    \
1626                 && (PL_charclass[(U8) (c)] & CC_mask_(classnum)))
1627
1628     /* The mask for the _A versions of the macros; it just adds in the bit for
1629      * ASCII. */
1630 #   define CC_mask_A_(classnum) (CC_mask_(classnum) | CC_mask_(CC_ASCII_))
1631
1632     /* For internal core Perl use only: the base macro for defining macros like
1633      * isALPHA_A.  The foo_A version makes sure that both the desired bit and
1634      * the ASCII bit are present */
1635 #   define generic_isCC_A_(c, classnum) (FITS_IN_8_BITS(c)      \
1636         && ((PL_charclass[(U8) (c)] & CC_mask_A_(classnum))     \
1637                                    == CC_mask_A_(classnum)))
1638
1639 /* On ASCII platforms certain classes form a single range.  It's faster to
1640  * special case these.  isDIGIT is a single range on all platforms */
1641 #   ifdef EBCDIC
1642 #     define isALPHA_A(c)  generic_isCC_A_(c, CC_ALPHA_)
1643 #     define isGRAPH_A(c)  generic_isCC_A_(c, CC_GRAPH_)
1644 #     define isLOWER_A(c)  generic_isCC_A_(c, CC_LOWER_)
1645 #     define isPRINT_A(c)  generic_isCC_A_(c, CC_PRINT_)
1646 #     define isUPPER_A(c)  generic_isCC_A_(c, CC_UPPER_)
1647 #   else
1648       /* By folding the upper and lowercase, we can use a single range */
1649 #     define isALPHA_A(c)  inRANGE((~('A' ^ 'a') & (c)), 'A', 'Z')
1650 #     define isGRAPH_A(c)  inRANGE(c, ' ' + 1, 0x7e)
1651 #     define isLOWER_A(c)  inRANGE(c, 'a', 'z')
1652 #     define isPRINT_A(c)  inRANGE(c, ' ', 0x7e)
1653 #     define isUPPER_A(c)  inRANGE(c, 'A', 'Z')
1654 #   endif
1655 #   define isALPHANUMERIC_A(c) generic_isCC_A_(c, CC_ALPHANUMERIC_)
1656 #   define isBLANK_A(c)  generic_isCC_A_(c, CC_BLANK_)
1657 #   define isCNTRL_A(c)  generic_isCC_A_(c, CC_CNTRL_)
1658 #   define isDIGIT_A(c)  inRANGE(c, '0', '9')
1659 #   define isPUNCT_A(c)  generic_isCC_A_(c, CC_PUNCT_)
1660 #   define isSPACE_A(c)  generic_isCC_A_(c, CC_SPACE_)
1661 #   define isWORDCHAR_A(c) generic_isCC_A_(c, CC_WORDCHAR_)
1662 #   define isXDIGIT_A(c)  generic_isCC_(c, CC_XDIGIT_) /* No non-ASCII xdigits */
1663 #   define isIDFIRST_A(c) generic_isCC_A_(c, CC_IDFIRST_)
1664 #   define isALPHA_L1(c)  generic_isCC_(c, CC_ALPHA_)
1665 #   define isALPHANUMERIC_L1(c) generic_isCC_(c, CC_ALPHANUMERIC_)
1666 #   define isBLANK_L1(c)  generic_isCC_(c, CC_BLANK_)
1667
1668     /* continuation character for legal NAME in \N{NAME} */
1669 #   define isCHARNAME_CONT(c) generic_isCC_(c, CC_CHARNAME_CONT_)
1670
1671 #   define isCNTRL_L1(c)  generic_isCC_(c, CC_CNTRL_)
1672 #   define isGRAPH_L1(c)  generic_isCC_(c, CC_GRAPH_)
1673 #   define isLOWER_L1(c)  generic_isCC_(c, CC_LOWER_)
1674 #   define isPRINT_L1(c)  generic_isCC_(c, CC_PRINT_)
1675 #   define isPSXSPC_L1(c)  isSPACE_L1(c)
1676 #   define isPUNCT_L1(c)  generic_isCC_(c, CC_PUNCT_)
1677 #   define isSPACE_L1(c)  generic_isCC_(c, CC_SPACE_)
1678 #   define isUPPER_L1(c)  generic_isCC_(c, CC_UPPER_)
1679 #   define isWORDCHAR_L1(c) generic_isCC_(c, CC_WORDCHAR_)
1680 #   define isIDFIRST_L1(c) generic_isCC_(c, CC_IDFIRST_)
1681
1682 #   ifdef EBCDIC
1683 #       define isASCII(c) generic_isCC_(c, CC_ASCII_)
1684 #   endif
1685
1686     /* Participates in a single-character fold with a character above 255 */
1687 #   if defined(PERL_IN_REGCOMP_ANY) || defined(PERL_IN_REGEXEC_C)
1688 #     define HAS_NONLATIN1_SIMPLE_FOLD_CLOSURE(c)                           \
1689         ((   ! cBOOL(FITS_IN_8_BITS(c)))                                    \
1690           || (PL_charclass[(U8) (c)] & CC_mask_(CC_NONLATIN1_SIMPLE_FOLD_)))
1691
1692 #   define IS_NON_FINAL_FOLD(c)   generic_isCC_(c, CC_NON_FINAL_FOLD_)
1693 #   define IS_IN_SOME_FOLD_L1(c)  generic_isCC_(c, CC_IS_IN_SOME_FOLD_)
1694 #  endif
1695
1696     /* Like the above, but also can be part of a multi-char fold */
1697 #   define HAS_NONLATIN1_FOLD_CLOSURE(c)                                    \
1698       (   (! cBOOL(FITS_IN_8_BITS(c)))                                      \
1699        || (PL_charclass[(U8) (c)] & CC_mask_(CC_NONLATIN1_FOLD_)))
1700
1701 #   define _isQUOTEMETA(c) generic_isCC_(c, CC_QUOTEMETA_)
1702
1703 /* is c a control character for which we have a mnemonic? */
1704 #  if defined(PERL_CORE) || defined(PERL_EXT)
1705 #     define isMNEMONIC_CNTRL(c) generic_isCC_(c, CC_MNEMONIC_CNTRL_)
1706 #  endif
1707 #else   /* else we don't have perl.h H_PERL */
1708
1709     /* If we don't have perl.h, we are compiling a utility program.  Below we
1710      * hard-code various macro definitions that wouldn't otherwise be available
1711      * to it. Most are coded based on first principles.  These are written to
1712      * avoid EBCDIC vs. ASCII #ifdef's as much as possible. */
1713 #   define isDIGIT_A(c)  inRANGE(c, '0', '9')
1714 #   define isBLANK_A(c)  ((c) == ' ' || (c) == '\t')
1715 #   define isSPACE_A(c)  (isBLANK_A(c)                                   \
1716                           || (c) == '\n'                                 \
1717                           || (c) == '\r'                                 \
1718                           || (c) == '\v'                                 \
1719                           || (c) == '\f')
1720     /* On EBCDIC, there are gaps between 'i' and 'j'; 'r' and 's'.  Same for
1721      * uppercase.  The tests for those aren't necessary on ASCII, but hurt only
1722      * performance (if optimization isn't on), and allow the same code to be
1723      * used for both platform types */
1724 #   define isLOWER_A(c)  inRANGE((c), 'a', 'i')                         \
1725                       || inRANGE((c), 'j', 'r')                         \
1726                       || inRANGE((c), 's', 'z')
1727 #   define isUPPER_A(c)  inRANGE((c), 'A', 'I')                         \
1728                       || inRANGE((c), 'J', 'R')                         \
1729                       || inRANGE((c), 'S', 'Z')
1730 #   define isALPHA_A(c)  (isUPPER_A(c) || isLOWER_A(c))
1731 #   define isALPHANUMERIC_A(c) (isALPHA_A(c) || isDIGIT_A(c))
1732 #   define isWORDCHAR_A(c)   (isALPHANUMERIC_A(c) || (c) == '_')
1733 #   define isIDFIRST_A(c)    (isALPHA_A(c) || (c) == '_')
1734 #   define isXDIGIT_A(c) (   isDIGIT_A(c)                               \
1735                           || inRANGE((c), 'a', 'f')                     \
1736                           || inRANGE((c), 'A', 'F')
1737 #   define isPUNCT_A(c)  ((c) == '-' || (c) == '!' || (c) == '"'        \
1738                        || (c) == '#' || (c) == '$' || (c) == '%'        \
1739                        || (c) == '&' || (c) == '\'' || (c) == '('       \
1740                        || (c) == ')' || (c) == '*' || (c) == '+'        \
1741                        || (c) == ',' || (c) == '.' || (c) == '/'        \
1742                        || (c) == ':' || (c) == ';' || (c) == '<'        \
1743                        || (c) == '=' || (c) == '>' || (c) == '?'        \
1744                        || (c) == '@' || (c) == '[' || (c) == '\\'       \
1745                        || (c) == ']' || (c) == '^' || (c) == '_'        \
1746                        || (c) == '`' || (c) == '{' || (c) == '|'        \
1747                        || (c) == '}' || (c) == '~')
1748 #   define isGRAPH_A(c)  (isALPHANUMERIC_A(c) || isPUNCT_A(c))
1749 #   define isPRINT_A(c)  (isGRAPH_A(c) || (c) == ' ')
1750
1751 #   ifdef EBCDIC
1752         /* The below is accurate for the 3 EBCDIC code pages traditionally
1753          * supported by perl.  The only difference between them in the controls
1754          * is the position of \n, and that is represented symbolically below */
1755 #       define isCNTRL_A(c)  ((c) == '\0' || (c) == '\a' || (c) == '\b'     \
1756                           ||  (c) == '\f' || (c) == '\n' || (c) == '\r'     \
1757                           ||  (c) == '\t' || (c) == '\v'                    \
1758                           || inRANGE((c), 1, 3)     /* SOH, STX, ETX */     \
1759                           ||  (c) == 7F   /* U+7F DEL */                    \
1760                           || inRANGE((c), 0x0E, 0x13) /* SO SI DLE          \
1761                                                          DC[1-3] */         \
1762                           ||  (c) == 0x18 /* U+18 CAN */                    \
1763                           ||  (c) == 0x19 /* U+19 EOM */                    \
1764                           || inRANGE((c), 0x1C, 0x1F) /* [FGRU]S */         \
1765                           ||  (c) == 0x26 /* U+17 ETB */                    \
1766                           ||  (c) == 0x27 /* U+1B ESC */                    \
1767                           ||  (c) == 0x2D /* U+05 ENQ */                    \
1768                           ||  (c) == 0x2E /* U+06 ACK */                    \
1769                           ||  (c) == 0x32 /* U+16 SYN */                    \
1770                           ||  (c) == 0x37 /* U+04 EOT */                    \
1771                           ||  (c) == 0x3C /* U+14 DC4 */                    \
1772                           ||  (c) == 0x3D /* U+15 NAK */                    \
1773                           ||  (c) == 0x3F)/* U+1A SUB */
1774 #       define isASCII(c)    (isCNTRL_A(c) || isPRINT_A(c))
1775 #   else /* isASCII is already defined for ASCII platforms, so can use that to
1776             define isCNTRL */
1777 #       define isCNTRL_A(c)  (isASCII(c) && ! isPRINT_A(c))
1778 #   endif
1779
1780     /* The _L1 macros may be unnecessary for the utilities; I (khw) added them
1781      * during debugging, and it seems best to keep them.  We may be called
1782      * without NATIVE_TO_LATIN1 being defined.  On ASCII platforms, it doesn't
1783      * do anything anyway, so make it not a problem */
1784 #   if ! defined(EBCDIC) && ! defined(NATIVE_TO_LATIN1)
1785 #       define NATIVE_TO_LATIN1(ch) (ch)
1786 #   endif
1787 #   define isALPHA_L1(c)     (isUPPER_L1(c) || isLOWER_L1(c))
1788 #   define isALPHANUMERIC_L1(c) (isALPHA_L1(c) || isDIGIT_A(c))
1789 #   define isBLANK_L1(c)     (isBLANK_A(c)                                   \
1790                               || (FITS_IN_8_BITS(c)                          \
1791                                   && NATIVE_TO_LATIN1((U8) c) == 0xA0))
1792 #   define isCNTRL_L1(c)     (FITS_IN_8_BITS(c) && (! isPRINT_L1(c)))
1793 #   define isGRAPH_L1(c)     (isPRINT_L1(c) && (! isBLANK_L1(c)))
1794 #   define isLOWER_L1(c)     (isLOWER_A(c)                                   \
1795                               || (FITS_IN_8_BITS(c)                          \
1796                                   && ((   NATIVE_TO_LATIN1((U8) c) >= 0xDF   \
1797                                        && NATIVE_TO_LATIN1((U8) c) != 0xF7)  \
1798                                        || NATIVE_TO_LATIN1((U8) c) == 0xAA   \
1799                                        || NATIVE_TO_LATIN1((U8) c) == 0xBA   \
1800                                        || NATIVE_TO_LATIN1((U8) c) == 0xB5)))
1801 #   define isPRINT_L1(c)     (isPRINT_A(c)                                   \
1802                               || (FITS_IN_8_BITS(c)                          \
1803                                   && NATIVE_TO_LATIN1((U8) c) >= 0xA0))
1804 #   define isPUNCT_L1(c)     (isPUNCT_A(c)                                   \
1805                               || (FITS_IN_8_BITS(c)                          \
1806                                   && (   NATIVE_TO_LATIN1((U8) c) == 0xA1    \
1807                                       || NATIVE_TO_LATIN1((U8) c) == 0xA7    \
1808                                       || NATIVE_TO_LATIN1((U8) c) == 0xAB    \
1809                                       || NATIVE_TO_LATIN1((U8) c) == 0xB6    \
1810                                       || NATIVE_TO_LATIN1((U8) c) == 0xB7    \
1811                                       || NATIVE_TO_LATIN1((U8) c) == 0xBB    \
1812                                       || NATIVE_TO_LATIN1((U8) c) == 0xBF)))
1813 #   define isSPACE_L1(c)     (isSPACE_A(c)                                   \
1814                               || (FITS_IN_8_BITS(c)                          \
1815                                   && (   NATIVE_TO_LATIN1((U8) c) == 0x85    \
1816                                       || NATIVE_TO_LATIN1((U8) c) == 0xA0)))
1817 #   define isUPPER_L1(c)     (isUPPER_A(c)                                   \
1818                               || (FITS_IN_8_BITS(c)                          \
1819                                   && (   IN_RANGE(NATIVE_TO_LATIN1((U8) c),  \
1820                                                   0xC0, 0xDE)                \
1821                                       && NATIVE_TO_LATIN1((U8) c) != 0xD7)))
1822 #   define isWORDCHAR_L1(c)  (isIDFIRST_L1(c) || isDIGIT_A(c))
1823 #   define isIDFIRST_L1(c)   (isALPHA_L1(c) || NATIVE_TO_LATIN1(c) == '_')
1824 #   define isCHARNAME_CONT(c) (isWORDCHAR_L1(c)                              \
1825                                || isBLANK_L1(c)                              \
1826                                || (c) == '-'                                 \
1827                                || (c) == '('                                 \
1828                                || (c) == ')')
1829     /* The following are not fully accurate in the above-ASCII range.  I (khw)
1830      * don't think it's necessary to be so for the purposes where this gets
1831      * compiled */
1832 #   define isQUOTEMETA_(c)      (FITS_IN_8_BITS(c) && ! isWORDCHAR_L1(c))
1833
1834     /* Many of the macros later in this file are defined in terms of these.  By
1835      * implementing them with a function, which converts the class number into
1836      * a call to the desired macro, all of the later ones work.  However, that
1837      * function won't be actually defined when building a utility program (no
1838      * perl.h), and so a compiler error will be generated if one is attempted
1839      * to be used.  And the above-Latin1 code points require Unicode tables to
1840      * be present, something unlikely to be the case when bootstrapping */
1841 #   define generic_isCC_(c, classnum)                                        \
1842          (FITS_IN_8_BITS(c) && S_bootstrap_ctype((U8) (c), (classnum), TRUE))
1843 #   define generic_isCC_A_(c, classnum)                                      \
1844          (FITS_IN_8_BITS(c) && S_bootstrap_ctype((U8) (c), (classnum), FALSE))
1845 #endif  /* End of no perl.h H_PERL */
1846
1847 #define isALPHANUMERIC(c)  isALPHANUMERIC_A(c)
1848 #define isALPHA(c)   isALPHA_A(c)
1849 #define isASCII_A(c)  isASCII(c)
1850 #define isASCII_L1(c)  isASCII(c)
1851 #define isBLANK(c)   isBLANK_A(c)
1852 #define isCNTRL(c)   isCNTRL_A(c)
1853 #define isDIGIT(c)   isDIGIT_A(c)
1854 #define isGRAPH(c)   isGRAPH_A(c)
1855 #define isIDFIRST(c) isIDFIRST_A(c)
1856 #define isLOWER(c)   isLOWER_A(c)
1857 #define isPRINT(c)   isPRINT_A(c)
1858 #define isPSXSPC_A(c) isSPACE_A(c)
1859 #define isPSXSPC(c)  isPSXSPC_A(c)
1860 #define isPSXSPC_L1(c) isSPACE_L1(c)
1861 #define isPUNCT(c)   isPUNCT_A(c)
1862 #define isSPACE(c)   isSPACE_A(c)
1863 #define isUPPER(c)   isUPPER_A(c)
1864 #define isWORDCHAR(c) isWORDCHAR_A(c)
1865 #define isXDIGIT(c)  isXDIGIT_A(c)
1866
1867 /* ASCII casing.  These could also be written as
1868     #define toLOWER(c) (isASCII(c) ? toLOWER_LATIN1(c) : (c))
1869     #define toUPPER(c) (isASCII(c) ? toUPPER_LATIN1_MOD(c) : (c))
1870    which uses table lookup and mask instead of subtraction.  (This would
1871    work because the _MOD does not apply in the ASCII range).
1872
1873    These actually are UTF-8 invariant casing, not just ASCII, as any non-ASCII
1874    UTF-8 invariants are neither upper nor lower.  (Only on EBCDIC platforms are
1875    there non-ASCII invariants, and all of them are controls.) */
1876 #define toLOWER(c)  (isUPPER(c) ? (U8)((c) + ('a' - 'A')) : (c))
1877 #define toUPPER(c)  (isLOWER(c) ? (U8)((c) - ('a' - 'A')) : (c))
1878
1879 /* In the ASCII range, these are equivalent to what they're here defined to be.
1880  * But by creating these definitions, other code doesn't have to be aware of
1881  * this detail.  Actually this works for all UTF-8 invariants, not just the
1882  * ASCII range. (EBCDIC platforms can have non-ASCII invariants.) */
1883 #define toFOLD(c)    toLOWER(c)
1884 #define toTITLE(c)   toUPPER(c)
1885
1886 #define toLOWER_A(c) toLOWER(c)
1887 #define toUPPER_A(c) toUPPER(c)
1888 #define toFOLD_A(c)  toFOLD(c)
1889 #define toTITLE_A(c) toTITLE(c)
1890
1891 /* Use table lookup for speed; returns the input itself if is out-of-range */
1892 #define toLOWER_LATIN1(c)    ((! FITS_IN_8_BITS(c))                        \
1893                              ? (c)                                         \
1894                              : PL_latin1_lc[ (U8) (c) ])
1895 #define toLOWER_L1(c)    toLOWER_LATIN1(c)  /* Synonym for consistency */
1896
1897 /* Modified uc.  Is correct uc except for three non-ascii chars which are
1898  * all mapped to one of them, and these need special handling; returns the
1899  * input itself if is out-of-range */
1900 #define toUPPER_LATIN1_MOD(c) ((! FITS_IN_8_BITS(c))                       \
1901                                ? (c)                                       \
1902                                : PL_mod_latin1_uc[ (U8) (c) ])
1903 #ifdef USE_LOCALE_CTYPE
1904 #  define IN_UTF8_CTYPE_LOCALE   PL_in_utf8_CTYPE_locale
1905 #  define IN_UTF8_TURKIC_LOCALE  PL_in_utf8_turkic_locale
1906 #else
1907 #  define IN_UTF8_CTYPE_LOCALE   false
1908 #  define IN_UTF8_TURKIC_LOCALE  false
1909 #endif
1910
1911 /* Use foo_LC_uvchr() instead  of these for beyond the Latin1 range */
1912
1913 /* For internal core Perl use only: the base macro for defining macros like
1914  * isALPHA_LC, which uses the current LC_CTYPE locale.  'c' is the code point
1915  * (0-255) to check.  In a UTF-8 locale, the result is the same as calling
1916  * isFOO_L1(); 'classnum' is something like CC_UPPER_, which gives the class
1917  * number for doing this.  For non-UTF-8 locales, the code to actually do the
1918  * test this is passed in 'non_utf8'.  If 'c' is above 255, 0 is returned.  For
1919  * accessing the full range of possible code points under locale rules, use the
1920  * macros based on generic_LC_uvchr_ instead of this. */
1921 #define generic_LC_base_(c, classnum, non_utf8_func)                        \
1922        (! FITS_IN_8_BITS(c)                                                 \
1923        ? 0                                                                  \
1924        : IN_UTF8_CTYPE_LOCALE                                               \
1925          ? cBOOL(PL_charclass[(U8) (c)] & CC_mask_(classnum))               \
1926          : cBOOL(non_utf8_func(c)))
1927
1928 /* A helper macro for defining macros like isALPHA_LC.  On systems without
1929  * proper locales, these reduce to, e.g., isALPHA_A */
1930 #ifdef CTYPE256
1931 #  define generic_LC_(c, classnum, non_utf8_func)   \
1932      generic_LC_base_(c, classnum, non_utf8_func)
1933 #else
1934 # define generic_LC_(c, classnum, non_utf8_func)    \
1935      generic_isCC_A_(c, classnum)
1936 #endif
1937
1938 /* Below are the definitions for the locale-sensitive character classification
1939  * macros whose input domain is a byte, and the locale isn't UTF-8.  These are
1940  * as close as possible to the bare versions on the platform and still yield
1941  * POSIX Standard-compliant results.
1942  *
1943  * There is currently only one place these definitions should be used, in
1944  * certain function calls like Perl_iswordchar_() in inline.h.
1945  *
1946  * Most likely you want to use the macros a ways below with names like
1947  * isALPHA_LC().  Rarely, you may want isU8_ALPHA_LC(), somewhat below.
1948  *
1949  * The first two aren't in C89, so the fallback is to use the non-locale
1950  * sensitive versions; these are the same for all platforms */
1951 #if defined(HAS_ISASCII)
1952 #   define is_posix_ASCII(c) isascii((U8) (c))
1953 #else
1954 #   define is_posix_ASCII(c) isASCII(c)
1955 #endif
1956
1957 #if defined(HAS_ISBLANK)
1958 #   define is_posix_BLANK(c) isblank((U8) (c))
1959 #else
1960 #   define is_posix_BLANK(c) isBLANK(c)
1961 #endif
1962
1963 /* The next few are the same in all platforms. */
1964 #define is_posix_CNTRL(c)     iscntrl((U8) (c))
1965 #define is_posix_IDFIRST(c)  (UNLIKELY((c) == '_') || is_posix_ALPHA(c))
1966 #define is_posix_SPACE(c)     isspace((U8) (c))
1967 #define is_posix_WORDCHAR(c) (UNLIKELY((c) == '_') || is_posix_ALPHANUMERIC(c))
1968
1969 /* The base-level case changing macros are also the same in all platforms */
1970 #define to_posix_LOWER(c)     tolower((U8) (c))
1971 #define to_posix_UPPER(c)     toupper((U8) (c))
1972 #define to_posix_FOLD(c)      to_posix_LOWER(c)
1973
1974 #ifdef WIN32
1975
1976 /* The Windows functions don't bother to follow the POSIX standard, which for
1977  * example says that something can't both be a printable and a control.  But
1978  * Windows treats \t as both a control and a printable, and does such things as
1979  * making superscripts into both digits and punctuation.  These #defines tame
1980  * these flaws by assuming that the definitions of controls (and the other few
1981  * ones defined above) are correct, and then making sure that other definitions
1982  * don't have weirdnesses, by adding a check that \w and its subsets aren't
1983  * ispunct(), and things that are \W, like ispunct(), arent't controls.  Not
1984  * all possible weirdnesses are checked for, just ones that were detected on
1985  * actual Microsoft code pages */
1986 #  define is_posix_ALPHA(c)                                          \
1987                           (isalpha((U8) (c)) && ! is_posix_PUNCT(c))
1988 #  define is_posix_ALPHANUMERIC(c)                                   \
1989                           (isalnum((U8) (c)) && ! is_posix_PUNCT(c))
1990 #  define is_posix_CASED(c)                                          \
1991    ((isupper((U8) (c)) || islower((U8) (c))) && ! is_posix_PUNCT(c))
1992 #  define is_posix_DIGIT(c)                                          \
1993                           (isdigit((U8) (c)) && ! is_posix_PUNCT(c))
1994 #  define is_posix_GRAPH(c)                                          \
1995                           (isgraph((U8) (c)) && ! is_posix_CNTRL(c))
1996 #  define is_posix_LOWER(c)                                          \
1997                           (islower((U8) (c)) && ! is_posix_PUNCT(c))
1998 #  define is_posix_PRINT(c)                                          \
1999                           (isprint((U8) (c)) && ! is_posix_CNTRL(c))
2000 #  define is_posix_PUNCT(c)                                          \
2001                           (ispunct((U8) (c)) && ! is_posix_CNTRL(c))
2002 #  define is_posix_UPPER(c)                                          \
2003                           (isupper((U8) (c)) && ! is_posix_PUNCT(c))
2004 #  define is_posix_XDIGIT(c)                                         \
2005                          (isxdigit((U8) (c)) && ! is_posix_PUNCT(c))
2006 #else
2007
2008 /* For all other platforms, as far as we know, isdigit(), etc. work sanely
2009  * enough */
2010 #  define is_posix_ALPHA(c)         isalpha((U8) (c))
2011 #  define is_posix_ALPHANUMERIC(c)  isalnum((U8) (c))
2012 #  define is_posix_CASED(c)        (islower((U8) (c)) || isupper((U8) (c)))
2013 #  define is_posix_DIGIT(c)         isdigit((U8) (c))
2014
2015      /* ... But it seems that IBM products treat NBSP as both a space and a
2016       * graphic; these are the two platforms that we have active test beds for.
2017       */
2018 #  if defined(OS390) || defined(_AIX)
2019 #    define is_posix_GRAPH(c)      (isgraph((U8) (c)) && ! isspace((U8) (c)))
2020 #  else
2021 #    define is_posix_GRAPH(c)       isgraph((U8) (c))
2022 #  endif
2023 #  define is_posix_LOWER(c)         islower((U8) (c))
2024 #  define is_posix_PRINT(c)         isprint((U8) (c))
2025 #  define is_posix_PUNCT(c)         ispunct((U8) (c))
2026 #  define is_posix_UPPER(c)         isupper((U8) (c))
2027 #  define is_posix_XDIGIT(c)        isxdigit((U8) (c))
2028 #endif
2029
2030 /* Below is the next level up, which currently expands to nothing more
2031  * than the previous layer.  These are the macros to use if you really need
2032  * something whose input domain is a byte, and the locale isn't UTF-8; that is,
2033  * where you normally would have to use things like bare isalnum().
2034  *
2035  * But most likely you should instead use the layer defined further below which
2036  * has names like isALPHA_LC.  They deal with larger-than-byte inputs, and
2037  * UTF-8 locales.
2038  *
2039  * (Note, proper general operation of the bare libc functions requires you to
2040  * cast to U8.  These do that for you automatically.) */
2041
2042 #  define WRAP_U8_LC_(c, classnum, posix)  posix(c)
2043
2044 #define isU8_ALPHANUMERIC_LC(c)                                                \
2045               WRAP_U8_LC_((c), CC_ALPHANUMERIC_, is_posix_ALPHANUMERIC)
2046 #define isU8_ALPHA_LC(c)    WRAP_U8_LC_((c), CC_ALPHA_, is_posix_ALPHA)
2047 #define isU8_ASCII_LC(c)    WRAP_U8_LC_((c), CC_ASCII_, is_posix_ASCII)
2048 #define isU8_BLANK_LC(c)    WRAP_U8_LC_((c), CC_BLANK_, is_posix_BLANK)
2049 #define isU8_CASED_LC(c)    WRAP_U8_LC_((c), CC_CASED_, is_posix_CASED)
2050 #define isU8_CNTRL_LC(c)    WRAP_U8_LC_((c), CC_CNTRL_, is_posix_CNTRL)
2051 #define isU8_DIGIT_LC(c)    WRAP_U8_LC_((c), CC_DIGIT_, is_posix_DIGIT)
2052 #define isU8_GRAPH_LC(c)    WRAP_U8_LC_((c), CC_GRAPH_, is_posix_GRAPH)
2053 #define isU8_IDFIRST_LC(c)  WRAP_U8_LC_((c), CC_IDFIRST_, is_posix_IDFIRST)
2054 #define isU8_LOWER_LC(c)    WRAP_U8_LC_((c), CC_LOWER_, is_posix_LOWER)
2055 #define isU8_PRINT_LC(c)    WRAP_U8_LC_((c), CC_PRINT_, is_posix_PRINT)
2056 #define isU8_PUNCT_LC(c)    WRAP_U8_LC_((c), CC_PUNCT_, is_posix_PUNCT)
2057 #define isU8_SPACE_LC(c)    WRAP_U8_LC_((c), CC_SPACE_, is_posix_SPACE)
2058 #define isU8_UPPER_LC(c)    WRAP_U8_LC_((c), CC_UPPER_, is_posix_UPPER)
2059 #define isU8_WORDCHAR_LC(c) WRAP_U8_LC_((c), CC_WORDCHAR_, is_posix_WORDCHAR)
2060 #define isU8_XDIGIT_LC(c)   WRAP_U8_LC_((c), CC_XDIGIT_, is_posix_XDIGIT)
2061
2062 #define toU8_LOWER_LC(c)    WRAP_U8_LC_((c), CC_TOLOWER_, to_posix_LOWER)
2063 #define toU8_UPPER_LC(c)    WRAP_U8_LC_((c), CC_TOUPPER_, to_posix_UPPER)
2064 #define toU8_FOLD_LC(c)     toU8_LOWER_LC(c)
2065
2066 /* The definitions below use the ones above to create versions in which the
2067  * input domain isn't restricted to bytes (though always returning false if the
2068  * input doesn't fit in a byte), and to behave properly should the locale be
2069  * UTF-8.  These are the documented ones, suitable for general use (though
2070  * toUPPER_LC and toFOLD_LC aren't documented because they need special
2071  * handling to deal with SHARP S expanding to two characters). */
2072
2073 #define isASCII_LC(c)               (FITS_IN_8_BITS(c) && isU8_ASCII_LC(c))
2074 #define isALPHA_LC(c)               generic_LC_(c, CC_ALPHA_, isU8_ALPHA_LC)
2075 #define isALPHANUMERIC_LC(c)                                                \
2076                       generic_LC_(c, CC_ALPHANUMERIC_, isU8_ALPHANUMERIC_LC)
2077 #define isBLANK_LC(c)               generic_LC_(c, CC_BLANK_, isU8_BLANK_LC)
2078 #define isCASED_LC(c)               generic_LC_(c, CC_CASED_, isU8_CASED_LC)
2079 #define isCNTRL_LC(c)               generic_LC_(c, CC_CNTRL_, isU8_CNTRL_LC)
2080 #define isDIGIT_LC(c)               generic_LC_(c, CC_DIGIT_, isU8_DIGIT_LC)
2081 #define isGRAPH_LC(c)               generic_LC_(c, CC_GRAPH_, isU8_GRAPH_LC)
2082 #define isIDFIRST_LC(c)         generic_LC_(c, CC_IDFIRST_, isU8_IDFIRST_LC)
2083 #define isLOWER_LC(c)               generic_LC_(c, CC_LOWER_, isU8_LOWER_LC)
2084 #define isPRINT_LC(c)               generic_LC_(c, CC_PRINT_, isU8_PRINT_LC)
2085 #define isPUNCT_LC(c)               generic_LC_(c, CC_PUNCT_, isU8_PUNCT_LC)
2086 #define isSPACE_LC(c)               generic_LC_(c, CC_SPACE_, isU8_SPACE_LC)
2087 #define isUPPER_LC(c)               generic_LC_(c, CC_UPPER_, isU8_UPPER_LC)
2088 #define isWORDCHAR_LC(c)      generic_LC_(c, CC_WORDCHAR_, isU8_WORDCHAR_LC)
2089 #define isXDIGIT_LC(c)            generic_LC_(c, CC_XDIGIT_, isU8_XDIGIT_LC)
2090
2091 #ifndef CTYPE256
2092 #  define toLOWER_LC(c)             toLOWER_A(c)
2093 #  define toUPPER_LC(c)             toUPPER_A(c)
2094 #  define toFOLD_LC(c)              toFOLD_A(c)
2095 #else
2096
2097 /* In the next three macros, the reason for using the PL_latin arrays is in
2098  * case the system function is defective; it ensures uniform results that
2099  * conform to the Unicode standard. */
2100
2101 /* This does not handle the anomalies in UTF-8 Turkic locales. */
2102 #  define toLOWER_LC(c)  ((! FITS_IN_8_BITS(c))                             \
2103                           ? (c)                                             \
2104                           : ((IN_UTF8_CTYPE_LOCALE)                         \
2105                              ? PL_latin1_lc[ (U8) (c) ]                     \
2106                              : ((U8) toU8_LOWER_LC(c))))
2107
2108 /* In this macro, note that the result can be larger than a byte in a UTF-8
2109  * locale.  It returns a single value, so can't adequately return the upper
2110  * case of LATIN SMALL LETTER SHARP S in a UTF-8 locale (which should be a
2111  * string of two values "SS");  instead it asserts against that under
2112  * DEBUGGING, and otherwise returns its input.  It does not handle the
2113  * anomalies in UTF-8 Turkic locales. */
2114 #  define toUPPER_LC(c)                                                     \
2115     ((! FITS_IN_8_BITS(c))                                                  \
2116      ? (c)                                                                  \
2117      : ((! IN_UTF8_CTYPE_LOCALE)                                            \
2118         ? ((U8) toU8_UPPER_LC(c))                                           \
2119         : (UNLIKELY(((U8)(c)) == MICRO_SIGN)                                \
2120            ? GREEK_CAPITAL_LETTER_MU                                        \
2121            : ((UNLIKELY(((U8) (c)) == LATIN_SMALL_LETTER_Y_WITH_DIAERESIS)  \
2122               ? LATIN_CAPITAL_LETTER_Y_WITH_DIAERESIS                       \
2123               : (UNLIKELY(((U8)(c)) == LATIN_SMALL_LETTER_SHARP_S)          \
2124                 ? (__ASSERT_(0) (c)) /* Fail on Sharp S in DEBUGGING */     \
2125                 : PL_mod_latin1_uc[ (U8) (c) ]))))))
2126
2127 /* In this macro, note that the result can be larger than a byte in a UTF-8
2128  * locale.  It returns a single value, so can't adequately return the fold case
2129  * of LATIN SMALL LETTER SHARP S in a UTF-8 locale (which should be a string of
2130  * two values "ss"); instead it asserts against that under DEBUGGING, and
2131  * otherwise returns its input.  It does not handle the anomalies in UTF-8
2132  * Turkic locales */
2133 #  define toFOLD_LC(c)                                                      \
2134                 ((UNLIKELY((c) == MICRO_SIGN) && IN_UTF8_CTYPE_LOCALE)      \
2135                  ? GREEK_SMALL_LETTER_MU                                    \
2136                  : (__ASSERT_(   ! IN_UTF8_CTYPE_LOCALE                     \
2137                               || LIKELY((c) != LATIN_SMALL_LETTER_SHARP_S)) \
2138                     toLOWER_LC(c)))
2139 #endif
2140
2141 #define isIDCONT(c)             isWORDCHAR(c)
2142 #define isIDCONT_A(c)           isWORDCHAR_A(c)
2143 #define isIDCONT_L1(c)          isWORDCHAR_L1(c)
2144 #define isIDCONT_LC(c)          isWORDCHAR_LC(c)
2145 #define isPSXSPC_LC(c)          isSPACE_LC(c)
2146
2147 /* For internal core Perl use only: the base macros for defining macros like
2148  * isALPHA_uvchr.  'c' is the code point to check.  'classnum' is the POSIX class
2149  * number defined earlier in this file.  generic_uvchr_() is used for POSIX
2150  * classes where there is a macro or function 'above_latin1' that takes the
2151  * single argument 'c' and returns the desired value.  These exist for those
2152  * classes which have simple definitions, avoiding the overhead of an inversion
2153  * list binary search.  generic_invlist_uvchr_() can be used
2154  * for classes where that overhead is faster than a direct lookup.
2155  * generic_uvchr_() won't compile if 'c' isn't unsigned, as it won't match the
2156  * 'above_latin1' prototype. generic_isCC_() macro does bounds checking, so
2157  * have duplicate checks here, so could create versions of the macros that
2158  * don't, but experiments show that gcc optimizes them out anyway. */
2159
2160 /* Note that all ignore 'use bytes' */
2161 #define generic_uvchr_(classnum, above_latin1, c) ((c) < 256                \
2162                                              ? generic_isCC_(c, classnum)   \
2163                                              : above_latin1(c))
2164 #define generic_invlist_uvchr_(classnum, c) ((c) < 256                      \
2165                                              ? generic_isCC_(c, classnum)   \
2166                                              : _is_uni_FOO(classnum, c))
2167 #define isALPHA_uvchr(c)      generic_invlist_uvchr_(CC_ALPHA_, c)
2168 #define isALPHANUMERIC_uvchr(c) generic_invlist_uvchr_(CC_ALPHANUMERIC_, c)
2169 #define isASCII_uvchr(c)      isASCII(c)
2170 #define isBLANK_uvchr(c)      generic_uvchr_(CC_BLANK_, is_HORIZWS_cp_high, c)
2171 #define isCNTRL_uvchr(c)      isCNTRL_L1(c) /* All controls are in Latin1 */
2172 #define isDIGIT_uvchr(c)      generic_invlist_uvchr_(CC_DIGIT_, c)
2173 #define isGRAPH_uvchr(c)      generic_invlist_uvchr_(CC_GRAPH_, c)
2174 #define isIDCONT_uvchr(c)                                                   \
2175                     generic_uvchr_(CC_WORDCHAR_, _is_uni_perl_idcont, c)
2176 #define isIDFIRST_uvchr(c)                                                  \
2177                     generic_uvchr_(CC_IDFIRST_, _is_uni_perl_idstart, c)
2178 #define isLOWER_uvchr(c)      generic_invlist_uvchr_(CC_LOWER_, c)
2179 #define isPRINT_uvchr(c)      generic_invlist_uvchr_(CC_PRINT_, c)
2180
2181 #define isPUNCT_uvchr(c)      generic_invlist_uvchr_(CC_PUNCT_, c)
2182 #define isSPACE_uvchr(c)      generic_uvchr_(CC_SPACE_, is_XPERLSPACE_cp_high, c)
2183 #define isPSXSPC_uvchr(c)     isSPACE_uvchr(c)
2184
2185 #define isUPPER_uvchr(c)      generic_invlist_uvchr_(CC_UPPER_, c)
2186 #define isVERTWS_uvchr(c)     generic_uvchr_(CC_VERTSPACE_, is_VERTWS_cp_high, c)
2187 #define isWORDCHAR_uvchr(c)   generic_invlist_uvchr_(CC_WORDCHAR_, c)
2188 #define isXDIGIT_uvchr(c)     generic_uvchr_(CC_XDIGIT_, is_XDIGIT_cp_high, c)
2189
2190 #define toFOLD_uvchr(c,s,l)     to_uni_fold(c,s,l)
2191 #define toLOWER_uvchr(c,s,l)    to_uni_lower(c,s,l)
2192 #define toTITLE_uvchr(c,s,l)    to_uni_title(c,s,l)
2193 #define toUPPER_uvchr(c,s,l)    to_uni_upper(c,s,l)
2194
2195 /* For backwards compatibility, even though '_uni' should mean official Unicode
2196  * code points, in Perl it means native for those below 256 */
2197 #define isALPHA_uni(c)          isALPHA_uvchr(c)
2198 #define isALPHANUMERIC_uni(c)   isALPHANUMERIC_uvchr(c)
2199 #define isASCII_uni(c)          isASCII_uvchr(c)
2200 #define isBLANK_uni(c)          isBLANK_uvchr(c)
2201 #define isCNTRL_uni(c)          isCNTRL_uvchr(c)
2202 #define isDIGIT_uni(c)          isDIGIT_uvchr(c)
2203 #define isGRAPH_uni(c)          isGRAPH_uvchr(c)
2204 #define isIDCONT_uni(c)         isIDCONT_uvchr(c)
2205 #define isIDFIRST_uni(c)        isIDFIRST_uvchr(c)
2206 #define isLOWER_uni(c)          isLOWER_uvchr(c)
2207 #define isPRINT_uni(c)          isPRINT_uvchr(c)
2208 #define isPUNCT_uni(c)          isPUNCT_uvchr(c)
2209 #define isSPACE_uni(c)          isSPACE_uvchr(c)
2210 #define isPSXSPC_uni(c)         isPSXSPC_uvchr(c)
2211 #define isUPPER_uni(c)          isUPPER_uvchr(c)
2212 #define isVERTWS_uni(c)         isVERTWS_uvchr(c)
2213 #define isWORDCHAR_uni(c)       isWORDCHAR_uvchr(c)
2214 #define isXDIGIT_uni(c)         isXDIGIT_uvchr(c)
2215 #define toFOLD_uni(c,s,l)       toFOLD_uvchr(c,s,l)
2216 #define toLOWER_uni(c,s,l)      toLOWER_uvchr(c,s,l)
2217 #define toTITLE_uni(c,s,l)      toTITLE_uvchr(c,s,l)
2218 #define toUPPER_uni(c,s,l)      toUPPER_uvchr(c,s,l)
2219
2220 /* For internal core Perl use only: the base macros for defining macros like
2221  * isALPHA_LC_uvchr.  These are like isALPHA_LC, but the input can be any code
2222  * point, not just 0-255.  Like generic_uvchr_, there are two versions, one for
2223  * simple class definitions; the other for more complex.  These are like
2224  * generic_uvchr_, so see it for more info. */
2225 #define generic_LC_uvchr_(latin1, above_latin1, c)                            \
2226                                     (c < 256 ? latin1(c) : above_latin1(c))
2227 #define generic_LC_invlist_uvchr_(latin1, classnum, c)                        \
2228                             (c < 256 ? latin1(c) : _is_uni_FOO(classnum, c))
2229
2230 #define isALPHA_LC_uvchr(c)  generic_LC_invlist_uvchr_(isALPHA_LC, CC_ALPHA_, c)
2231 #define isALPHANUMERIC_LC_uvchr(c)  generic_LC_invlist_uvchr_(isALPHANUMERIC_LC, \
2232                                                          CC_ALPHANUMERIC_, c)
2233 #define isASCII_LC_uvchr(c)   isASCII_LC(c)
2234 #define isBLANK_LC_uvchr(c)  generic_LC_uvchr_(isBLANK_LC,                    \
2235                                                         is_HORIZWS_cp_high, c)
2236 #define isCNTRL_LC_uvchr(c)  (c < 256 ? isCNTRL_LC(c) : 0)
2237 #define isDIGIT_LC_uvchr(c)  generic_LC_invlist_uvchr_(isDIGIT_LC, CC_DIGIT_, c)
2238 #define isGRAPH_LC_uvchr(c)  generic_LC_invlist_uvchr_(isGRAPH_LC, CC_GRAPH_, c)
2239 #define isIDCONT_LC_uvchr(c) generic_LC_uvchr_(isIDCONT_LC,                   \
2240                                                   _is_uni_perl_idcont, c)
2241 #define isIDFIRST_LC_uvchr(c) generic_LC_uvchr_(isIDFIRST_LC,                 \
2242                                                   _is_uni_perl_idstart, c)
2243 #define isLOWER_LC_uvchr(c)  generic_LC_invlist_uvchr_(isLOWER_LC, CC_LOWER_, c)
2244 #define isPRINT_LC_uvchr(c)  generic_LC_invlist_uvchr_(isPRINT_LC, CC_PRINT_, c)
2245 #define isPSXSPC_LC_uvchr(c)  isSPACE_LC_uvchr(c)
2246 #define isPUNCT_LC_uvchr(c)  generic_LC_invlist_uvchr_(isPUNCT_LC, CC_PUNCT_, c)
2247 #define isSPACE_LC_uvchr(c)  generic_LC_uvchr_(isSPACE_LC,                    \
2248                                                     is_XPERLSPACE_cp_high, c)
2249 #define isUPPER_LC_uvchr(c)  generic_LC_invlist_uvchr_(isUPPER_LC, CC_UPPER_, c)
2250 #define isWORDCHAR_LC_uvchr(c) generic_LC_invlist_uvchr_(isWORDCHAR_LC,       \
2251                                                            CC_WORDCHAR_, c)
2252 #define isXDIGIT_LC_uvchr(c) generic_LC_uvchr_(isXDIGIT_LC,                   \
2253                                                        is_XDIGIT_cp_high, c)
2254
2255 #define isBLANK_LC_uni(c)    isBLANK_LC_uvchr(UNI_TO_NATIVE(c))
2256
2257 /* The "_safe" macros make sure that we don't attempt to read beyond 'e', but
2258  * they don't otherwise go out of their way to look for malformed UTF-8.  If
2259  * they can return accurate results without knowing if the input is otherwise
2260  * malformed, they do so.  For example isASCII is accurate in spite of any
2261  * non-length malformations because it looks only at a single byte. Likewise
2262  * isDIGIT looks just at the first byte for code points 0-255, as all UTF-8
2263  * variant ones return FALSE.  But, if the input has to be well-formed in order
2264  * for the results to be accurate, the macros will test and if malformed will
2265  * call a routine to die
2266  *
2267  * Except for toke.c, the macros do assume that e > p, asserting that on
2268  * DEBUGGING builds.  Much code that calls these depends on this being true,
2269  * for other reasons.  toke.c is treated specially as using the regular
2270  * assertion breaks it in many ways.  All strings that these operate on there
2271  * are supposed to have an extra NUL character at the end,  so that *e = \0. A
2272  * bunch of code in toke.c assumes that this is true, so the assertion allows
2273  * for that */
2274 #ifdef PERL_IN_TOKE_C
2275 #  define _utf8_safe_assert(p,e) ((e) > (p) || ((e) == (p) && *(p) == '\0'))
2276 #else
2277 #  define _utf8_safe_assert(p,e) ((e) > (p))
2278 #endif
2279
2280 #define generic_utf8_safe_(classnum, p, e, above_latin1)                    \
2281     ((! _utf8_safe_assert(p, e))                                            \
2282       ? (_force_out_malformed_utf8_message((U8 *) (p), (U8 *) (e), 0, 1), 0)\
2283       : (UTF8_IS_INVARIANT(*(p)))                                           \
2284           ? generic_isCC_(*(p), classnum)                                   \
2285           : (UTF8_IS_DOWNGRADEABLE_START(*(p))                              \
2286              ? ((LIKELY((e) - (p) > 1 && UTF8_IS_CONTINUATION(*((p)+1))))   \
2287                 ? generic_isCC_(EIGHT_BIT_UTF8_TO_NATIVE(*(p), *((p)+1 )),  \
2288                                 classnum)                                   \
2289                 : (_force_out_malformed_utf8_message(                       \
2290                                         (U8 *) (p), (U8 *) (e), 0, 1), 0))  \
2291              : above_latin1))
2292 /* Like the above, but calls 'above_latin1(p)' to get the utf8 value.
2293  * 'above_latin1' can be a macro */
2294 #define generic_func_utf8_safe_(classnum, above_latin1, p, e)               \
2295                     generic_utf8_safe_(classnum, p, e, above_latin1(p, e))
2296 #define generic_non_invlist_utf8_safe_(classnum, above_latin1, p, e)        \
2297           generic_utf8_safe_(classnum, p, e,                                \
2298                              (UNLIKELY((e) - (p) < UTF8SKIP(p))             \
2299                               ? (_force_out_malformed_utf8_message(         \
2300                                       (U8 *) (p), (U8 *) (e), 0, 1), 0)     \
2301                               : above_latin1(p)))
2302 /* Like the above, but passes classnum to _isFOO_utf8(), instead of having an
2303  * 'above_latin1' parameter */
2304 #define generic_invlist_utf8_safe_(classnum, p, e)                          \
2305             generic_utf8_safe_(classnum, p, e, _is_utf8_FOO(classnum, p, e))
2306
2307 /* Like the above, but should be used only when it is known that there are no
2308  * characters in the upper-Latin1 range (128-255 on ASCII platforms) which the
2309  * class is TRUE for.  Hence it can skip the tests for this range.
2310  * 'above_latin1' should include its arguments */
2311 #define generic_utf8_safe_no_upper_latin1_(classnum, p, e, above_latin1)    \
2312          (__ASSERT_(_utf8_safe_assert(p, e))                                \
2313          (isASCII(*(p)))                                                    \
2314           ? generic_isCC_(*(p), classnum)                                   \
2315           : (UTF8_IS_DOWNGRADEABLE_START(*(p)))                             \
2316              ? 0 /* Note that doesn't check validity for latin1 */          \
2317              : above_latin1)
2318
2319
2320 #define isALPHA_utf8(p, e)         isALPHA_utf8_safe(p, e)
2321 #define isALPHANUMERIC_utf8(p, e)  isALPHANUMERIC_utf8_safe(p, e)
2322 #define isASCII_utf8(p, e)         isASCII_utf8_safe(p, e)
2323 #define isBLANK_utf8(p, e)         isBLANK_utf8_safe(p, e)
2324 #define isCNTRL_utf8(p, e)         isCNTRL_utf8_safe(p, e)
2325 #define isDIGIT_utf8(p, e)         isDIGIT_utf8_safe(p, e)
2326 #define isGRAPH_utf8(p, e)         isGRAPH_utf8_safe(p, e)
2327 #define isIDCONT_utf8(p, e)        isIDCONT_utf8_safe(p, e)
2328 #define isIDFIRST_utf8(p, e)       isIDFIRST_utf8_safe(p, e)
2329 #define isLOWER_utf8(p, e)         isLOWER_utf8_safe(p, e)
2330 #define isPRINT_utf8(p, e)         isPRINT_utf8_safe(p, e)
2331 #define isPSXSPC_utf8(p, e)        isPSXSPC_utf8_safe(p, e)
2332 #define isPUNCT_utf8(p, e)         isPUNCT_utf8_safe(p, e)
2333 #define isSPACE_utf8(p, e)         isSPACE_utf8_safe(p, e)
2334 #define isUPPER_utf8(p, e)         isUPPER_utf8_safe(p, e)
2335 #define isVERTWS_utf8(p, e)        isVERTWS_utf8_safe(p, e)
2336 #define isWORDCHAR_utf8(p, e)      isWORDCHAR_utf8_safe(p, e)
2337 #define isXDIGIT_utf8(p, e)        isXDIGIT_utf8_safe(p, e)
2338
2339 #define isALPHA_utf8_safe(p, e)  generic_invlist_utf8_safe_(CC_ALPHA_, p, e)
2340 #define isALPHANUMERIC_utf8_safe(p, e)                                      \
2341                         generic_invlist_utf8_safe_(CC_ALPHANUMERIC_, p, e)
2342 #define isASCII_utf8_safe(p, e)                                             \
2343     /* Because ASCII is invariant under utf8, the non-utf8 macro            \
2344     * works */                                                              \
2345     (__ASSERT_(_utf8_safe_assert(p, e)) isASCII(*(p)))
2346 #define isBLANK_utf8_safe(p, e)                                             \
2347         generic_non_invlist_utf8_safe_(CC_BLANK_, is_HORIZWS_high, p, e)
2348
2349 #ifdef EBCDIC
2350     /* Because all controls are UTF-8 invariants in EBCDIC, we can use this
2351      * more efficient macro instead of the more general one */
2352 #   define isCNTRL_utf8_safe(p, e)                                          \
2353                     (__ASSERT_(_utf8_safe_assert(p, e)) isCNTRL_L1(*(p)))
2354 #else
2355 #   define isCNTRL_utf8_safe(p, e)  generic_utf8_safe_(CC_CNTRL_, p, e, 0)
2356 #endif
2357
2358 #define isDIGIT_utf8_safe(p, e)                                             \
2359             generic_utf8_safe_no_upper_latin1_(CC_DIGIT_, p, e,             \
2360                                             _is_utf8_FOO(CC_DIGIT_, p, e))
2361 #define isGRAPH_utf8_safe(p, e)    generic_invlist_utf8_safe_(CC_GRAPH_, p, e)
2362 #define isIDCONT_utf8_safe(p, e)   generic_func_utf8_safe_(CC_WORDCHAR_,    \
2363                                                  _is_utf8_perl_idcont, p, e)
2364
2365 /* To prevent S_scan_word in toke.c from hanging, we have to make sure that
2366  * IDFIRST is an alnum.  See
2367  * https://github.com/Perl/perl5/issues/10275 for more detail than you
2368  * ever wanted to know about.  (In the ASCII range, there isn't a difference.)
2369  * This used to be not the XID version, but we decided to go with the more
2370  * modern Unicode definition */
2371 #define isIDFIRST_utf8_safe(p, e)                                           \
2372     generic_func_utf8_safe_(CC_IDFIRST_,                                    \
2373                             _is_utf8_perl_idstart, (U8 *) (p), (U8 *) (e))
2374
2375 #define isLOWER_utf8_safe(p, e)     generic_invlist_utf8_safe_(CC_LOWER_, p, e)
2376 #define isPRINT_utf8_safe(p, e)     generic_invlist_utf8_safe_(CC_PRINT_, p, e)
2377 #define isPSXSPC_utf8_safe(p, e)     isSPACE_utf8_safe(p, e)
2378 #define isPUNCT_utf8_safe(p, e)     generic_invlist_utf8_safe_(CC_PUNCT_, p, e)
2379 #define isSPACE_utf8_safe(p, e)                                             \
2380     generic_non_invlist_utf8_safe_(CC_SPACE_, is_XPERLSPACE_high, p, e)
2381 #define isUPPER_utf8_safe(p, e)  generic_invlist_utf8_safe_(CC_UPPER_, p, e)
2382 #define isVERTWS_utf8_safe(p, e)                                            \
2383         generic_non_invlist_utf8_safe_(CC_VERTSPACE_, is_VERTWS_high, p, e)
2384 #define isWORDCHAR_utf8_safe(p, e)                                          \
2385                              generic_invlist_utf8_safe_(CC_WORDCHAR_, p, e)
2386 #define isXDIGIT_utf8_safe(p, e)                                            \
2387                    generic_utf8_safe_no_upper_latin1_(CC_XDIGIT_, p, e,     \
2388                              (UNLIKELY((e) - (p) < UTF8SKIP(p))             \
2389                               ? (_force_out_malformed_utf8_message(         \
2390                                       (U8 *) (p), (U8 *) (e), 0, 1), 0)     \
2391                               : is_XDIGIT_high(p)))
2392
2393 #define toFOLD_utf8(p,e,s,l)    toFOLD_utf8_safe(p,e,s,l)
2394 #define toLOWER_utf8(p,e,s,l)   toLOWER_utf8_safe(p,e,s,l)
2395 #define toTITLE_utf8(p,e,s,l)   toTITLE_utf8_safe(p,e,s,l)
2396 #define toUPPER_utf8(p,e,s,l)   toUPPER_utf8_safe(p,e,s,l)
2397
2398 /* For internal core use only, subject to change */
2399 #define _toFOLD_utf8_flags(p,e,s,l,f)  _to_utf8_fold_flags (p,e,s,l,f)
2400 #define _toLOWER_utf8_flags(p,e,s,l,f) _to_utf8_lower_flags(p,e,s,l,f)
2401 #define _toTITLE_utf8_flags(p,e,s,l,f) _to_utf8_title_flags(p,e,s,l,f)
2402 #define _toUPPER_utf8_flags(p,e,s,l,f) _to_utf8_upper_flags(p,e,s,l,f)
2403
2404 #define toFOLD_utf8_safe(p,e,s,l)   _toFOLD_utf8_flags(p,e,s,l, FOLD_FLAGS_FULL)
2405 #define toLOWER_utf8_safe(p,e,s,l)  _toLOWER_utf8_flags(p,e,s,l, 0)
2406 #define toTITLE_utf8_safe(p,e,s,l)  _toTITLE_utf8_flags(p,e,s,l, 0)
2407 #define toUPPER_utf8_safe(p,e,s,l)  _toUPPER_utf8_flags(p,e,s,l, 0)
2408
2409 #define isALPHA_LC_utf8(p, e)         isALPHA_LC_utf8_safe(p, e)
2410 #define isALPHANUMERIC_LC_utf8(p, e)  isALPHANUMERIC_LC_utf8_safe(p, e)
2411 #define isASCII_LC_utf8(p, e)         isASCII_LC_utf8_safe(p, e)
2412 #define isBLANK_LC_utf8(p, e)         isBLANK_LC_utf8_safe(p, e)
2413 #define isCNTRL_LC_utf8(p, e)         isCNTRL_LC_utf8_safe(p, e)
2414 #define isDIGIT_LC_utf8(p, e)         isDIGIT_LC_utf8_safe(p, e)
2415 #define isGRAPH_LC_utf8(p, e)         isGRAPH_LC_utf8_safe(p, e)
2416 #define isIDCONT_LC_utf8(p, e)        isIDCONT_LC_utf8_safe(p, e)
2417 #define isIDFIRST_LC_utf8(p, e)       isIDFIRST_LC_utf8_safe(p, e)
2418 #define isLOWER_LC_utf8(p, e)         isLOWER_LC_utf8_safe(p, e)
2419 #define isPRINT_LC_utf8(p, e)         isPRINT_LC_utf8_safe(p, e)
2420 #define isPSXSPC_LC_utf8(p, e)        isPSXSPC_LC_utf8_safe(p, e)
2421 #define isPUNCT_LC_utf8(p, e)         isPUNCT_LC_utf8_safe(p, e)
2422 #define isSPACE_LC_utf8(p, e)         isSPACE_LC_utf8_safe(p, e)
2423 #define isUPPER_LC_utf8(p, e)         isUPPER_LC_utf8_safe(p, e)
2424 #define isWORDCHAR_LC_utf8(p, e)      isWORDCHAR_LC_utf8_safe(p, e)
2425 #define isXDIGIT_LC_utf8(p, e)        isXDIGIT_LC_utf8_safe(p, e)
2426
2427 /* For internal core Perl use only: the base macros for defining macros like
2428  * isALPHA_LC_utf8_safe.  These are like generic_utf8_, but if the first code
2429  * point in 'p' is within the 0-255 range, it uses locale rules from the
2430  * passed-in 'macro' parameter */
2431 #define generic_LC_utf8_safe_(macro, p, e, above_latin1)                    \
2432          (__ASSERT_(_utf8_safe_assert(p, e))                                \
2433          (UTF8_IS_INVARIANT(*(p)))                                          \
2434           ? macro(*(p))                                                     \
2435           : (UTF8_IS_DOWNGRADEABLE_START(*(p))                              \
2436              ? ((LIKELY((e) - (p) > 1 && UTF8_IS_CONTINUATION(*((p)+1))))   \
2437                 ? macro(EIGHT_BIT_UTF8_TO_NATIVE(*(p), *((p)+1)))           \
2438                 : (_force_out_malformed_utf8_message(                       \
2439                                         (U8 *) (p), (U8 *) (e), 0, 1), 0))  \
2440               : above_latin1))
2441
2442 #define generic_LC_invlist_utf8_safe_(macro, classnum, p, e)                  \
2443             generic_LC_utf8_safe_(macro, p, e,                              \
2444                                             _is_utf8_FOO(classnum, p, e))
2445
2446 #define generic_LC_func_utf8_safe_(macro, above_latin1, p, e)               \
2447             generic_LC_utf8_safe_(macro, p, e, above_latin1(p, e))
2448
2449 #define generic_LC_non_invlist_utf8_safe_(classnum, above_latin1, p, e)       \
2450           generic_LC_utf8_safe_(classnum, p, e,                             \
2451                              (UNLIKELY((e) - (p) < UTF8SKIP(p))             \
2452                               ? (_force_out_malformed_utf8_message(         \
2453                                       (U8 *) (p), (U8 *) (e), 0, 1), 0)     \
2454                               : above_latin1(p)))
2455
2456 #define isALPHANUMERIC_LC_utf8_safe(p, e)                                   \
2457             generic_LC_invlist_utf8_safe_(isALPHANUMERIC_LC,                \
2458                                         CC_ALPHANUMERIC_, p, e)
2459 #define isALPHA_LC_utf8_safe(p, e)                                          \
2460             generic_LC_invlist_utf8_safe_(isALPHA_LC, CC_ALPHA_, p, e)
2461 #define isASCII_LC_utf8_safe(p, e)                                          \
2462                     (__ASSERT_(_utf8_safe_assert(p, e)) isASCII_LC(*(p)))
2463 #define isBLANK_LC_utf8_safe(p, e)                                          \
2464         generic_LC_non_invlist_utf8_safe_(isBLANK_LC, is_HORIZWS_high, p, e)
2465 #define isCNTRL_LC_utf8_safe(p, e)                                          \
2466             generic_LC_utf8_safe_(isCNTRL_LC, p, e, 0)
2467 #define isDIGIT_LC_utf8_safe(p, e)                                          \
2468             generic_LC_invlist_utf8_safe_(isDIGIT_LC, CC_DIGIT_, p, e)
2469 #define isGRAPH_LC_utf8_safe(p, e)                                          \
2470             generic_LC_invlist_utf8_safe_(isGRAPH_LC, CC_GRAPH_, p, e)
2471 #define isIDCONT_LC_utf8_safe(p, e)                                         \
2472             generic_LC_func_utf8_safe_(isIDCONT_LC,                         \
2473                                                 _is_utf8_perl_idcont, p, e)
2474 #define isIDFIRST_LC_utf8_safe(p, e)                                        \
2475             generic_LC_func_utf8_safe_(isIDFIRST_LC,                        \
2476                                                _is_utf8_perl_idstart, p, e)
2477 #define isLOWER_LC_utf8_safe(p, e)                                          \
2478             generic_LC_invlist_utf8_safe_(isLOWER_LC, CC_LOWER_, p, e)
2479 #define isPRINT_LC_utf8_safe(p, e)                                          \
2480             generic_LC_invlist_utf8_safe_(isPRINT_LC, CC_PRINT_, p, e)
2481 #define isPSXSPC_LC_utf8_safe(p, e)    isSPACE_LC_utf8_safe(p, e)
2482 #define isPUNCT_LC_utf8_safe(p, e)                                          \
2483             generic_LC_invlist_utf8_safe_(isPUNCT_LC, CC_PUNCT_, p, e)
2484 #define isSPACE_LC_utf8_safe(p, e)                                          \
2485     generic_LC_non_invlist_utf8_safe_(isSPACE_LC, is_XPERLSPACE_high, p, e)
2486 #define isUPPER_LC_utf8_safe(p, e)                                          \
2487             generic_LC_invlist_utf8_safe_(isUPPER_LC, CC_UPPER_, p, e)
2488 #define isWORDCHAR_LC_utf8_safe(p, e)                                       \
2489             generic_LC_invlist_utf8_safe_(isWORDCHAR_LC, CC_WORDCHAR_, p, e)
2490 #define isXDIGIT_LC_utf8_safe(p, e)                                         \
2491         generic_LC_non_invlist_utf8_safe_(isXDIGIT_LC, is_XDIGIT_high, p, e)
2492
2493 /* Macros for backwards compatibility and for completeness when the ASCII and
2494  * Latin1 values are identical */
2495 #define isALPHAU(c)         isALPHA_L1(c)
2496 #define isDIGIT_L1(c)       isDIGIT_A(c)
2497 #define isOCTAL(c)          isOCTAL_A(c)
2498 #define isOCTAL_L1(c)       isOCTAL_A(c)
2499 #define isXDIGIT_L1(c)      isXDIGIT_A(c)
2500 #define isALNUM(c)          isWORDCHAR(c)
2501 #define isALNUM_A(c)        isALNUM(c)
2502 #define isALNUMU(c)         isWORDCHAR_L1(c)
2503 #define isALNUM_LC(c)       isWORDCHAR_LC(c)
2504 #define isALNUM_uni(c)      isWORDCHAR_uni(c)
2505 #define isALNUM_LC_uvchr(c) isWORDCHAR_LC_uvchr(c)
2506 #define isALNUM_utf8(p,e)   isWORDCHAR_utf8(p,e)
2507 #define isALNUM_utf8_safe(p,e) isWORDCHAR_utf8_safe(p,e)
2508 #define isALNUM_LC_utf8(p,e)isWORDCHAR_LC_utf8(p,e)
2509 #define isALNUM_LC_utf8_safe(p,e)isWORDCHAR_LC_utf8_safe(p,e)
2510 #define isALNUMC_A(c)       isALPHANUMERIC_A(c)      /* Mnemonic: "C's alnum" */
2511 #define isALNUMC_L1(c)      isALPHANUMERIC_L1(c)
2512 #define isALNUMC(c)         isALPHANUMERIC(c)
2513 #define isALNUMC_LC(c)      isALPHANUMERIC_LC(c)
2514 #define isALNUMC_uni(c)     isALPHANUMERIC_uni(c)
2515 #define isALNUMC_LC_uvchr(c) isALPHANUMERIC_LC_uvchr(c)
2516 #define isALNUMC_utf8(p,e)  isALPHANUMERIC_utf8(p,e)
2517 #define isALNUMC_utf8_safe(p,e)  isALPHANUMERIC_utf8_safe(p,e)
2518 #define isALNUMC_LC_utf8_safe(p,e) isALPHANUMERIC_LC_utf8_safe(p,e)
2519
2520 /* On EBCDIC platforms, CTRL-@ is 0, CTRL-A is 1, etc, just like on ASCII,
2521  * except that they don't necessarily mean the same characters, e.g. CTRL-D is
2522  * 4 on both systems, but that is EOT on ASCII;  ST on EBCDIC.
2523  * '?' is special-cased on EBCDIC to APC, which is the control there that is
2524  * the outlier from the block that contains the other controls, just like
2525  * toCTRL('?') on ASCII yields DEL, the control that is the outlier from the C0
2526  * block.  If it weren't special cased, it would yield a non-control.
2527  * The conversion works both ways, so toCTRL('D') is 4, and toCTRL(4) is D,
2528  * etc. */
2529 #ifndef EBCDIC
2530 #  define toCTRL(c)    (__ASSERT_(FITS_IN_8_BITS(c)) toUPPER(((U8)(c))) ^ 64)
2531 #else
2532 #  define toCTRL(c)   (__ASSERT_(FITS_IN_8_BITS(c))                     \
2533                       ((isPRINT_A(c))                                   \
2534                        ? (UNLIKELY((c) == '?')                          \
2535                          ? QUESTION_MARK_CTRL                           \
2536                          : (NATIVE_TO_LATIN1(toUPPER((U8) (c))) ^ 64))  \
2537                        : (UNLIKELY((c) == QUESTION_MARK_CTRL)           \
2538                          ? '?'                                          \
2539                          : (LATIN1_TO_NATIVE(((U8) (c)) ^ 64)))))
2540 #endif
2541
2542 /*
2543 =for apidoc Ay||line_t
2544 The typedef to use to declare variables that are to hold line numbers.
2545
2546 =cut
2547
2548   Line numbers are unsigned, 32 bits.
2549 */
2550 typedef U32 line_t;
2551 #define LINE_Tf  U32uf
2552 #define NOLINE ((line_t) 4294967295UL)  /* = FFFFFFFF */
2553
2554 /* Helpful alias for version prescan */
2555 #define is_LAX_VERSION(a,b) \
2556         (a != Perl_prescan_version(aTHX_ a, FALSE, b, NULL, NULL, NULL, NULL))
2557
2558 #define is_STRICT_VERSION(a,b) \
2559         (a != Perl_prescan_version(aTHX_ a, TRUE, b, NULL, NULL, NULL, NULL))
2560
2561 #define BADVERSION(a,b,c) \
2562         if (b) { \
2563             *b = c; \
2564         } \
2565         return a;
2566
2567 /* Converts a character KNOWN to represent a hexadecimal digit (0-9, A-F, or
2568  * a-f) to its numeric value without using any branches.  The input is
2569  * validated only by an assert() in DEBUGGING builds.
2570  *
2571  * It works by right shifting and isolating the bit that is 0 for the digits,
2572  * and 1 for at least the alphas A-F, a-f.  The bit is shifted to the ones
2573  * position, and then to the eights position.  Both are added together to form
2574  * 0 if the input is '0'-'9' and to form 9 if alpha.  This is added to the
2575  * final four bits of the input to form the correct value. */
2576 #define XDIGIT_VALUE(c) (__ASSERT_(isXDIGIT(c))                             \
2577            ((NATIVE_TO_LATIN1(c) >> 6) & 1)  /* 1 if alpha; 0 if not */     \
2578          + ((NATIVE_TO_LATIN1(c) >> 3) & 8)  /* 8 if alpha; 0 if not */     \
2579          + ((c) & 0xF))   /* 0-9 if input valid hex digit */
2580
2581 /* The argument is a string pointer, which is advanced. */
2582 #define READ_XDIGIT(s)  ((s)++, XDIGIT_VALUE(*((s) - 1)))
2583
2584 /* Converts a character known to represent an octal digit (0-7) to its numeric
2585  * value.  The input is validated only by an assert() in DEBUGGING builds.  In
2586  * both ASCII and EBCDIC the last 3 bits of the octal digits range from 0-7. */
2587 #define OCTAL_VALUE(c) (__ASSERT_(isOCTAL(c)) (7 & (c)))
2588
2589 /* Efficiently returns a boolean as to if two native characters are equivalent
2590  * case-insensitively.  At least one of the characters must be one of [A-Za-z];
2591  * the ALPHA in the name is to remind you of that.  This is asserted() in
2592  * DEBUGGING builds.  Because [A-Za-z] are invariant under UTF-8, this macro
2593  * works (on valid input) for both non- and UTF-8-encoded bytes.
2594  *
2595  * When one of the inputs is a compile-time constant and gets folded by the
2596  * compiler, this reduces to an AND and a TEST.  On both EBCDIC and ASCII
2597  * machines, 'A' and 'a' differ by a single bit; the same with the upper and
2598  * lower case of all other ASCII-range alphabetics.  On ASCII platforms, they
2599  * are 32 apart; on EBCDIC, they are 64.  At compile time, this uses an
2600  * exclusive 'or' to find that bit and then inverts it to form a mask, with
2601  * just a single 0, in the bit position where the upper- and lowercase differ.
2602  * */
2603 #define isALPHA_FOLD_EQ(c1, c2)                                         \
2604                       (__ASSERT_(isALPHA_A(c1) || isALPHA_A(c2))        \
2605                       ((c1) & ~('A' ^ 'a')) ==  ((c2) & ~('A' ^ 'a')))
2606 #define isALPHA_FOLD_NE(c1, c2) (! isALPHA_FOLD_EQ((c1), (c2)))
2607
2608 /*
2609 =for apidoc_section $memory
2610
2611 =for apidoc Am|void|Newx|void* ptr|int nitems|type
2612 =for apidoc_item |void*|safemalloc|size_t size
2613
2614 The XSUB-writer's interface to the C C<malloc> function.
2615
2616 Memory obtained by this should B<ONLY> be freed with L</"Safefree">.
2617
2618 In 5.9.3, Newx() and friends replace the older New() API, and drops
2619 the first parameter, I<x>, a debug aid which allowed callers to identify
2620 themselves.  This aid has been superseded by a new build option,
2621 PERL_MEM_LOG (see L<perlhacktips/PERL_MEM_LOG>).  The older API is still
2622 there for use in XS modules supporting older perls.
2623
2624 =for apidoc Am|void|Newxc|void* ptr|int nitems|type|cast
2625 The XSUB-writer's interface to the C C<malloc> function, with
2626 cast.  See also C<L</Newx>>.
2627
2628 Memory obtained by this should B<ONLY> be freed with L</"Safefree">.
2629
2630 =for apidoc Am|void|Newxz|void* ptr|int nitems|type
2631 =for apidoc_item |void*|safecalloc|size_t nitems|size_t item_size
2632
2633 The XSUB-writer's interface to the C C<malloc> function.  The allocated
2634 memory is zeroed with C<memzero>.  See also C<L</Newx>>.
2635
2636 Memory obtained by this should B<ONLY> be freed with L</"Safefree">.
2637
2638 =for apidoc Am|void|Renew|void* ptr|int nitems|type
2639 =for apidoc_item |void*|saferealloc|void *ptr|size_t size
2640
2641 The XSUB-writer's interface to the C C<realloc> function.
2642
2643 Memory obtained by this should B<ONLY> be freed with L</"Safefree">.
2644
2645 =for apidoc Am|void|Renewc|void* ptr|int nitems|type|cast
2646 The XSUB-writer's interface to the C C<realloc> function, with
2647 cast.
2648
2649 Memory obtained by this should B<ONLY> be freed with L</"Safefree">.
2650
2651 =for apidoc Am|void|Safefree|void* ptr
2652 The XSUB-writer's interface to the C C<free> function.
2653
2654 This should B<ONLY> be used on memory obtained using L</"Newx"> and friends.
2655
2656 =for apidoc_section $string
2657 =for apidoc    Am|void  |Move |void* src|void* dest|int nitems|type
2658 =for apidoc_item |void *|MoveD|void* src|void* dest|int nitems|type
2659 The XSUB-writer's interface to the C C<memmove> function.  The C<src> is the
2660 source, C<dest> is the destination, C<nitems> is the number of items, and
2661 C<type> is the type.  Can do overlapping moves.  See also C<L</Copy>>.
2662
2663 C<MoveD> is like C<Move> but returns C<dest>.  Useful
2664 for encouraging compilers to tail-call
2665 optimise.
2666
2667 =for apidoc    Am|void  |Copy |void* src|void* dest|int nitems|type
2668 =for apidoc_item |void *|CopyD|void* src|void* dest|int nitems|type
2669 The XSUB-writer's interface to the C C<memcpy> function.  The C<src> is the
2670 source, C<dest> is the destination, C<nitems> is the number of items, and
2671 C<type> is the type.  May fail on overlapping copies.  See also C<L</Move>>.
2672
2673 C<CopyD> is like C<Copy> but returns C<dest>.  Useful
2674 for encouraging compilers to tail-call
2675 optimise.
2676
2677 =for apidoc    Am|void  |NewCopy |void* src|void* dest|int nitems|type
2678 Combines Newx() and Copy() into a single macro. Dest will be allocated
2679 using Newx() and then src will be copied into it.
2680
2681 =for apidoc    Am|void  |Zero |void* dest|int nitems|type
2682 =for apidoc_item |void *|ZeroD|void* dest|int nitems|type
2683
2684 The XSUB-writer's interface to the C C<memzero> function.  The C<dest> is the
2685 destination, C<nitems> is the number of items, and C<type> is the type.
2686
2687 C<ZeroD> is like C<Zero> but returns C<dest>.  Useful
2688 for encouraging compilers to tail-call
2689 optimise.
2690
2691 =for apidoc_section $utility
2692 =for apidoc Amu|void|StructCopy|type *src|type *dest|type
2693 This is an architecture-independent macro to copy one structure to another.
2694
2695 =for apidoc Am|void|PoisonWith|void* dest|int nitems|type|U8 byte
2696
2697 Fill up memory with a byte pattern (a byte repeated over and over
2698 again) that hopefully catches attempts to access uninitialized memory.
2699
2700 =for apidoc Am|void|PoisonNew|void* dest|int nitems|type
2701
2702 PoisonWith(0xAB) for catching access to allocated but uninitialized memory.
2703
2704 =for apidoc Am|void|PoisonFree|void* dest|int nitems|type
2705
2706 PoisonWith(0xEF) for catching access to freed memory.
2707
2708 =for apidoc Am|void|Poison|void* dest|int nitems|type
2709
2710 PoisonWith(0xEF) for catching access to freed memory.
2711
2712 =cut */
2713
2714 /* Maintained for backwards-compatibility only. Use newSV() instead. */
2715 #ifndef PERL_CORE
2716 #define NEWSV(x,len)    newSV(len)
2717 #endif
2718
2719 #define MEM_SIZE_MAX ((MEM_SIZE)-1)
2720
2721 #define _PERL_STRLEN_ROUNDUP_UNCHECKED(n) (((n) - 1 + PERL_STRLEN_ROUNDUP_QUANTUM) & ~((MEM_SIZE)PERL_STRLEN_ROUNDUP_QUANTUM - 1))
2722
2723 #ifdef PERL_MALLOC_WRAP
2724
2725 /* This expression will be constant-folded at compile time.  It checks
2726  * whether or not the type of the count n is so small (e.g. U8 or U16, or
2727  * U32 on 64-bit systems) that there's no way a wrap-around could occur.
2728  * As well as avoiding the need for a run-time check in some cases, it's
2729  * designed to avoid compiler warnings like:
2730  *     comparison is always false due to limited range of data type
2731  * It's mathematically equivalent to
2732  *    max(n) * sizeof(t) > MEM_SIZE_MAX
2733  */
2734
2735 #  define _MEM_WRAP_NEEDS_RUNTIME_CHECK(n,t) \
2736     (  sizeof(MEM_SIZE) < sizeof(n) \
2737     || sizeof(t) > ((MEM_SIZE)1 << 8*(sizeof(MEM_SIZE) - sizeof(n))))
2738
2739 /* This is written in a slightly odd way to avoid various spurious
2740  * compiler warnings. We *want* to write the expression as
2741  *    _MEM_WRAP_NEEDS_RUNTIME_CHECK(n,t) && (n > C)
2742  * (for some compile-time constant C), but even when the LHS
2743  * constant-folds to false at compile-time, g++ insists on emitting
2744  * warnings about the RHS (e.g. "comparison is always false"), so instead
2745  * we write it as
2746  *
2747  *    (cond ? n : X) > C
2748  *
2749  * where X is a constant with X > C always false. Choosing a value for X
2750  * is tricky. If 0, some compilers will complain about 0 > C always being
2751  * false; if 1, Coverity complains when n happens to be the constant value
2752  * '1', that cond ? 1 : 1 has the same value on both branches; so use C
2753  * for X and hope that nothing else whines.
2754  */
2755
2756 #  define _MEM_WRAP_WILL_WRAP(n,t) \
2757       ((_MEM_WRAP_NEEDS_RUNTIME_CHECK(n,t) ? (MEM_SIZE)(n) : \
2758             MEM_SIZE_MAX/sizeof(t)) > MEM_SIZE_MAX/sizeof(t))
2759
2760 #  define MEM_WRAP_CHECK(n,t) \
2761         (void)(UNLIKELY(_MEM_WRAP_WILL_WRAP(n,t)) \
2762         && (croak_memory_wrap(),0))
2763
2764 #  define MEM_WRAP_CHECK_1(n,t,a) \
2765         (void)(UNLIKELY(_MEM_WRAP_WILL_WRAP(n,t)) \
2766         && (Perl_croak_nocontext("%s",(a)),0))
2767
2768 /* "a" arg must be a string literal */
2769 #  define MEM_WRAP_CHECK_s(n,t,a) \
2770         (   (void) (UNLIKELY(_MEM_WRAP_WILL_WRAP(n,t))          \
2771          && (Perl_croak_nocontext(ASSERT_IS_LITERAL(a)), 0)))
2772
2773 #  define MEM_WRAP_CHECK_(n,t) MEM_WRAP_CHECK(n,t),
2774
2775 #  define PERL_STRLEN_ROUNDUP(n) ((void)(((n) > MEM_SIZE_MAX - 2 * PERL_STRLEN_ROUNDUP_QUANTUM) ? (croak_memory_wrap(),0) : 0), _PERL_STRLEN_ROUNDUP_UNCHECKED(n))
2776 #else
2777
2778 #  define MEM_WRAP_CHECK(n,t)
2779 #  define MEM_WRAP_CHECK_1(n,t,a)
2780 #  define MEM_WRAP_CHECK_s(n,t,a)
2781 #  define MEM_WRAP_CHECK_(n,t)
2782
2783 #  define PERL_STRLEN_ROUNDUP(n) _PERL_STRLEN_ROUNDUP_UNCHECKED(n)
2784
2785 #endif
2786
2787 #ifdef PERL_MEM_LOG
2788 /*
2789  * If PERL_MEM_LOG is defined, all Newx()s, Renew()s, and Safefree()s
2790  * go through functions, which are handy for debugging breakpoints, but
2791  * which more importantly get the immediate calling environment (file and
2792  * line number, and C function name if available) passed in.  This info can
2793  * then be used for logging the calls, for which one gets a sample
2794  * implementation unless -DPERL_MEM_LOG_NOIMPL is also defined.
2795  *
2796  * Known problems:
2797  * - not all memory allocs get logged, only those
2798  *   that go through Newx() and derivatives (while all
2799  *   Safefrees do get logged)
2800  * - __FILE__ and __LINE__ do not work everywhere
2801  * - __func__ or __FUNCTION__ even less so
2802  * - I think more goes on after the perlio frees but
2803  *   the thing is that STDERR gets closed (as do all
2804  *   the file descriptors)
2805  * - no deeper calling stack than the caller of the Newx()
2806  *   or the kind, but do I look like a C reflection/introspection
2807  *   utility to you?
2808  * - the function prototypes for the logging functions
2809  *   probably should maybe be somewhere else than handy.h
2810  * - one could consider inlining (macrofying) the logging
2811  *   for speed, but I am too lazy
2812  * - one could imagine recording the allocations in a hash,
2813  *   (keyed by the allocation address?), and maintain that
2814  *   through reallocs and frees, but how to do that without
2815  *   any News() happening...?
2816  * - lots of -Ddefines to get useful/controllable output
2817  * - lots of ENV reads
2818  */
2819
2820 # ifdef PERL_CORE
2821 #  ifndef PERL_MEM_LOG_NOIMPL
2822 enum mem_log_type {
2823   MLT_ALLOC,
2824   MLT_REALLOC,
2825   MLT_FREE,
2826   MLT_NEW_SV,
2827   MLT_DEL_SV
2828 };
2829 #  endif
2830 # endif
2831
2832 #endif
2833
2834 #ifdef PERL_MEM_LOG
2835 #define MEM_LOG_ALLOC(n,t,a)     Perl_mem_log_alloc(n,sizeof(t),STRINGIFY(t),a,__FILE__,__LINE__,FUNCTION__)
2836 #define MEM_LOG_REALLOC(n,t,v,a) Perl_mem_log_realloc(n,sizeof(t),STRINGIFY(t),v,a,__FILE__,__LINE__,FUNCTION__)
2837 #define MEM_LOG_FREE(a)          Perl_mem_log_free(a,__FILE__,__LINE__,FUNCTION__)
2838 #endif
2839
2840 #ifndef MEM_LOG_ALLOC
2841 #define MEM_LOG_ALLOC(n,t,a)     (a)
2842 #endif
2843 #ifndef MEM_LOG_REALLOC
2844 #define MEM_LOG_REALLOC(n,t,v,a) (a)
2845 #endif
2846 #ifndef MEM_LOG_FREE
2847 #define MEM_LOG_FREE(a)          (a)
2848 #endif
2849
2850 #define Newx(v,n,t)     (v = (MEM_WRAP_CHECK_(n,t) (t*)MEM_LOG_ALLOC(n,t,safemalloc((MEM_SIZE)((n)*sizeof(t))))))
2851 #define Newxc(v,n,t,c)  (v = (MEM_WRAP_CHECK_(n,t) (c*)MEM_LOG_ALLOC(n,t,safemalloc((MEM_SIZE)((n)*sizeof(t))))))
2852 #define Newxz(v,n,t)    (v = (MEM_WRAP_CHECK_(n,t) (t*)MEM_LOG_ALLOC(n,t,safecalloc((n),sizeof(t)))))
2853
2854 #ifndef PERL_CORE
2855 /* pre 5.9.x compatibility */
2856 #define New(x,v,n,t)    Newx(v,n,t)
2857 #define Newc(x,v,n,t,c) Newxc(v,n,t,c)
2858 #define Newz(x,v,n,t)   Newxz(v,n,t)
2859 #endif
2860
2861 #define Renew(v,n,t) \
2862           (v = (MEM_WRAP_CHECK_(n,t) (t*)MEM_LOG_REALLOC(n,t,v,saferealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t))))))
2863 #define Renewc(v,n,t,c) \
2864           (v = (MEM_WRAP_CHECK_(n,t) (c*)MEM_LOG_REALLOC(n,t,v,saferealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t))))))
2865
2866 #ifdef PERL_POISON
2867 #define Safefree(d) \
2868   ((d) ? (void)(safefree(MEM_LOG_FREE((Malloc_t)(d))), Poison(&(d), 1, Malloc_t)) : (void) 0)
2869 #else
2870 #define Safefree(d)     safefree(MEM_LOG_FREE((Malloc_t)(d)))
2871 #endif
2872
2873 /* assert that a valid ptr has been supplied - use this instead of assert(ptr)  *
2874  * as it handles cases like constant string arguments without throwing warnings *
2875  * the cast is required, as is the inequality check, to avoid warnings          */
2876 #define perl_assert_ptr(p) assert( ((void*)(p)) != 0 )
2877
2878
2879 #define Move(s,d,n,t)   (MEM_WRAP_CHECK_(n,t) perl_assert_ptr(d), perl_assert_ptr(s), (void)memmove((char*)(d),(const char*)(s), (n) * sizeof(t)))
2880 #define Copy(s,d,n,t)   (MEM_WRAP_CHECK_(n,t) perl_assert_ptr(d), perl_assert_ptr(s), (void)memcpy((char*)(d),(const char*)(s), (n) * sizeof(t)))
2881 #define Zero(d,n,t)     (MEM_WRAP_CHECK_(n,t) perl_assert_ptr(d), (void)memzero((char*)(d), (n) * sizeof(t)))
2882
2883 /* Like above, but returns a pointer to 'd' */
2884 #define MoveD(s,d,n,t)  (MEM_WRAP_CHECK_(n,t) perl_assert_ptr(d), perl_assert_ptr(s), memmove((char*)(d),(const char*)(s), (n) * sizeof(t)))
2885 #define CopyD(s,d,n,t)  (MEM_WRAP_CHECK_(n,t) perl_assert_ptr(d), perl_assert_ptr(s), memcpy((char*)(d),(const char*)(s), (n) * sizeof(t)))
2886 #define ZeroD(d,n,t)    (MEM_WRAP_CHECK_(n,t) perl_assert_ptr(d), memzero((char*)(d), (n) * sizeof(t)))
2887
2888 #define NewCopy(s,d,n,t) STMT_START {   \
2889     Newx(d,n,t);                        \
2890     Copy(s,d,n,t);                      \
2891 } STMT_END
2892
2893 #define PoisonWith(d,n,t,b)     (MEM_WRAP_CHECK_(n,t) (void)memset((char*)(d), (U8)(b), (n) * sizeof(t)))
2894 #define PoisonNew(d,n,t)        PoisonWith(d,n,t,0xAB)
2895 #define PoisonFree(d,n,t)       PoisonWith(d,n,t,0xEF)
2896 #define Poison(d,n,t)           PoisonFree(d,n,t)
2897
2898 #ifdef PERL_POISON
2899 #  define PERL_POISON_EXPR(x) x
2900 #else
2901 #  define PERL_POISON_EXPR(x)
2902 #endif
2903
2904 /* Shallow copy */
2905 #define StructCopy(s,d,t) (*((t*)(d)) = *((t*)(s)))
2906
2907 /*
2908 =for apidoc_section $utility
2909
2910 =for apidoc Am|STRLEN|C_ARRAY_LENGTH|void *a
2911
2912 Returns the number of elements in the input C array (so you want your
2913 zero-based indices to be less than but not equal to).
2914
2915 =for apidoc Am|void *|C_ARRAY_END|void *a
2916
2917 Returns a pointer to one element past the final element of the input C array.
2918
2919 =cut
2920
2921 C_ARRAY_END is one past the last: half-open/half-closed range, not
2922 last-inclusive range.
2923 */
2924 #define C_ARRAY_LENGTH(a)       (sizeof(a)/sizeof((a)[0]))
2925 #define C_ARRAY_END(a)          ((a) + C_ARRAY_LENGTH(a))
2926
2927 #if defined(PERL_CORE) || defined(PERL_EXT_RE_BUILD)
2928 /* strlen() of a literal string constant.  Restricting this to core, in part
2929  * because it can generate compiler warnings about comparing unlike signs */
2930 #  define STRLENs(s)  (sizeof("" s "") - 1)
2931 #endif
2932
2933 #ifdef NEED_VA_COPY
2934 # ifdef va_copy
2935 #  define Perl_va_copy(s, d) va_copy(d, s)
2936 # elif defined(__va_copy)
2937 #  define Perl_va_copy(s, d) __va_copy(d, s)
2938 # else
2939 #  define Perl_va_copy(s, d) Copy(s, d, 1, va_list)
2940 # endif
2941 #endif
2942
2943 /* convenience debug macros */
2944 #ifdef USE_ITHREADS
2945 #define pTHX_FORMAT  "Perl interpreter: 0x%p"
2946 #define pTHX__FORMAT ", Perl interpreter: 0x%p"
2947 #define pTHX_VALUE_   (void *)my_perl,
2948 #define pTHX_VALUE    (void *)my_perl
2949 #define pTHX__VALUE_ ,(void *)my_perl,
2950 #define pTHX__VALUE  ,(void *)my_perl
2951 #else
2952 #define pTHX_FORMAT
2953 #define pTHX__FORMAT
2954 #define pTHX_VALUE_
2955 #define pTHX_VALUE
2956 #define pTHX__VALUE_
2957 #define pTHX__VALUE
2958 #endif /* USE_ITHREADS */
2959
2960 /* Perl_deprecate was not part of the public API, and did not have a deprecate()
2961    shortcut macro defined without -DPERL_CORE. Neither codesearch.google.com nor
2962    CPAN::Unpack show any users outside the core.  */
2963 #ifdef PERL_CORE
2964 #  define deprecate(s) Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),    \
2965                                             "Use of " s " is deprecated")
2966 #  define deprecate_disappears_in(when,message) \
2967               Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),    \
2968                                message " is deprecated, and will disappear in Perl " when)
2969 #  define deprecate_fatal_in(when,message) \
2970               Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),    \
2971                                message " is deprecated, and will become fatal in Perl " when)
2972 #endif
2973
2974 /* Internal macros to deal with gids and uids */
2975 #ifdef PERL_CORE
2976
2977 #  if Uid_t_size > IVSIZE
2978 #    define sv_setuid(sv, uid)       sv_setnv((sv), (NV)(uid))
2979 #    define SvUID(sv)                SvNV(sv)
2980 #  elif Uid_t_sign <= 0
2981 #    define sv_setuid(sv, uid)       sv_setiv((sv), (IV)(uid))
2982 #    define SvUID(sv)                SvIV(sv)
2983 #  else
2984 #    define sv_setuid(sv, uid)       sv_setuv((sv), (UV)(uid))
2985 #    define SvUID(sv)                SvUV(sv)
2986 #  endif /* Uid_t_size */
2987
2988 #  if Gid_t_size > IVSIZE
2989 #    define sv_setgid(sv, gid)       sv_setnv((sv), (NV)(gid))
2990 #    define SvGID(sv)                SvNV(sv)
2991 #  elif Gid_t_sign <= 0
2992 #    define sv_setgid(sv, gid)       sv_setiv((sv), (IV)(gid))
2993 #    define SvGID(sv)                SvIV(sv)
2994 #  else
2995 #    define sv_setgid(sv, gid)       sv_setuv((sv), (UV)(gid))
2996 #    define SvGID(sv)                SvUV(sv)
2997 #  endif /* Gid_t_size */
2998
2999 #endif
3000
3001 /* These are simple Marsaglia XOR-SHIFT RNG's for 64 and 32 bits. These
3002  * RNG's are of reasonable quality, very fast, and have the interesting
3003  * property that provided 'x' is non-zero they create a cycle of 2^32-1
3004  * or 2^64-1 "random" like numbers, with the exception of 0. Thus they
3005  * are very useful when you want an integer to "dance" in a random way,
3006  * but you also never want it to become 0 and thus false.
3007  *
3008  * Obviously they leave x unchanged if it starts out as 0.
3009  *
3010  * We have two variants just because that can be helpful in certain
3011  * places. There is no advantage to either, they are equally bad as each
3012  * other as far RNG's go. Sufficiently random for many purposes, but
3013  * insufficiently random for serious use as they fail important tests in
3014  * the Test01 BigCrush RNG test suite by L’Ecuyer and Simard. (Note
3015  * that Drand48 also fails BigCrush). The main point is they produce
3016  * different sequences and in places where we want some randomlike
3017  * behavior they are cheap and easy.
3018  *
3019  * Marsaglia was one of the early researchers into RNG testing and wrote
3020  * the Diehard RNG test suite, which after his death become the
3021  * Dieharder RNG suite, and was generally supplanted by the Test01 suite
3022  * by L'Ecruyer and associates.
3023  *
3024  * There are dozens of shift parameters that create a pseudo random ring
3025  * of integers 1..2^N-1, if you need a different sequence just read the
3026  * paper and select a set of parameters. In fact, simply reversing the
3027  * shift order from L/R/L to R/L/R should result in another valid
3028  * example, but read the paper before you do that.
3029  *
3030  * PDF of the original paper:
3031  *  https://www.jstatsoft.org/article/download/v008i14/916
3032  * Wikipedia:
3033  *  https://en.wikipedia.org/wiki/Xorshift
3034  * Criticism:
3035  *  https://www.iro.umontreal.ca/~lecuyer/myftp/papers/xorshift.pdf
3036  * Test01:
3037  *  http://simul.iro.umontreal.ca/testu01/tu01.html
3038  * Diehard:
3039  *  https://en.wikipedia.org/wiki/Diehard_tests
3040  * Dieharder:
3041  *  https://webhome.phy.duke.edu/~rgb/General/rand_rate/rand_rate.abs
3042  *
3043  */
3044
3045 /* 32 bit version */
3046 #define PERL_XORSHIFT32_A(x)    \
3047 STMT_START {                    \
3048     (x) ^= ((x) << 13);         \
3049     (x) ^= ((x) >> 17);         \
3050     (x) ^= ((x) << 5);          \
3051 } STMT_END
3052
3053 /* 64 bit version */
3054 #define PERL_XORSHIFT64_A(x)    \
3055 STMT_START {                    \
3056     (x) ^= ((x) << 13);         \
3057     (x) ^= ((x) >> 7);          \
3058     (x) ^= ((x) << 17);         \
3059 } STMT_END
3060
3061 /* 32 bit version */
3062 #define PERL_XORSHIFT32_B(x)    \
3063 STMT_START {                    \
3064     (x) ^= ((x) << 5);          \
3065     (x) ^= ((x) >> 27);         \
3066     (x) ^= ((x) << 8);          \
3067 } STMT_END
3068
3069 /* 64 bit version - currently this is unused,
3070  * it is provided here to complement the 32 bit _B
3071  * variant which IS used. */
3072 #define PERL_XORSHIFT64_B(x)    \
3073 STMT_START {                    \
3074     (x) ^= ((x) << 15);         \
3075     (x) ^= ((x) >> 49);         \
3076     (x) ^= ((x) << 26);         \
3077 } STMT_END
3078
3079
3080 #endif  /* PERL_HANDY_H_ */
3081
3082 /*
3083  * ex: set ts=8 sts=4 sw=4 et:
3084  */