15759b3d2Safresh1################################################################################ 25759b3d2Safresh1## 35759b3d2Safresh1## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 45759b3d2Safresh1## Version 2.x, Copyright (C) 2001, Paul Marquess. 55759b3d2Safresh1## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 65759b3d2Safresh1## 75759b3d2Safresh1## This program is free software; you can redistribute it and/or 85759b3d2Safresh1## modify it under the same terms as Perl itself. 95759b3d2Safresh1## 105759b3d2Safresh1################################################################################ 115759b3d2Safresh1 125759b3d2Safresh1=provides 135759b3d2Safresh1 145759b3d2Safresh1__UNDEFINED__ 15*3d61058aSafresh1__REDEFINE__ 165759b3d2Safresh1END_EXTERN_C 175759b3d2Safresh1EXTERN_C 18f3efcd01Safresh1INT2PTR 19f3efcd01Safresh1MUTABLE_PTR 20f3efcd01Safresh1NVTYPE 21f3efcd01Safresh1PERLIO_FUNCS_CAST 22f3efcd01Safresh1PERLIO_FUNCS_DECL 23eac174f2Safresh1PERL_STATIC_INLINE 24f3efcd01Safresh1PERL_UNUSED_ARG 25f3efcd01Safresh1PERL_UNUSED_CONTEXT 26f3efcd01Safresh1PERL_UNUSED_DECL 27f3efcd01Safresh1PERL_UNUSED_RESULT 28f3efcd01Safresh1PERL_UNUSED_VAR 29f3efcd01Safresh1PERL_USE_GCC_BRACE_GROUPS 30f3efcd01Safresh1PTR2ul 31f3efcd01Safresh1PTRV 32f3efcd01Safresh1START_EXTERN_C 335759b3d2Safresh1STMT_END 34f3efcd01Safresh1STMT_START 35f3efcd01Safresh1SvRX 365759b3d2Safresh1WIDEST_UTYPE 375759b3d2Safresh1XSRETURN 389a4edab6SbluhmNOT_REACHED 399a4edab6SbluhmASSUME 40*3d61058aSafresh1Stack_off_t 41*3d61058aSafresh1Stack_off_t_MAX 42*3d61058aSafresh1PERL_STACK_OFFSET_DEFINED 435759b3d2Safresh1 445759b3d2Safresh1=implementation 455759b3d2Safresh1 46eac174f2Safresh1#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L 47eac174f2Safresh1__UNDEFINED__ PERL_STATIC_INLINE static inline 48eac174f2Safresh1#else 49eac174f2Safresh1__UNDEFINED__ PERL_STATIC_INLINE static 50eac174f2Safresh1#endif 51eac174f2Safresh1 525759b3d2Safresh1__UNDEFINED__ cBOOL(cbool) ((cbool) ? (bool)1 : (bool)0) 535759b3d2Safresh1__UNDEFINED__ OpHAS_SIBLING(o) (cBOOL((o)->op_sibling)) 545759b3d2Safresh1__UNDEFINED__ OpSIBLING(o) (0 + (o)->op_sibling) 555759b3d2Safresh1__UNDEFINED__ OpMORESIB_set(o, sib) ((o)->op_sibling = (sib)) 565759b3d2Safresh1__UNDEFINED__ OpLASTSIB_set(o, parent) ((o)->op_sibling = NULL) 575759b3d2Safresh1__UNDEFINED__ OpMAYBESIB_set(o, sib, parent) ((o)->op_sibling = (sib)) 58f3efcd01Safresh1__UNDEFINED__ HEf_SVKEY -2 59f3efcd01Safresh1 60f3efcd01Safresh1#if defined(DEBUGGING) && !defined(__COVERITY__) 61f3efcd01Safresh1__UNDEFINED__ __ASSERT_(statement) assert(statement), 62f3efcd01Safresh1#else 63f3efcd01Safresh1__UNDEFINED__ __ASSERT_(statement) 64f3efcd01Safresh1#endif 655759b3d2Safresh1 66eac174f2Safresh1__UNDEF_NOT_PROVIDED__ __has_builtin(x) 0 679a4edab6Sbluhm 689a4edab6Sbluhm#if __has_builtin(__builtin_unreachable) 699a4edab6Sbluhm# define D_PPP_HAS_BUILTIN_UNREACHABLE 709a4edab6Sbluhm#elif (defined(__GNUC__) && ( __GNUC__ > 4 \ 719a4edab6Sbluhm || __GNUC__ == 4 && __GNUC_MINOR__ >= 5)) 729a4edab6Sbluhm# define D_PPP_HAS_BUILTIN_UNREACHABLE 739a4edab6Sbluhm#endif 749a4edab6Sbluhm 759a4edab6Sbluhm#ifndef ASSUME 769a4edab6Sbluhm# ifdef DEBUGGING 779a4edab6Sbluhm# define ASSUME(x) assert(x) 789a4edab6Sbluhm# elif defined(_MSC_VER) 799a4edab6Sbluhm# define ASSUME(x) __assume(x) 809a4edab6Sbluhm# elif defined(__ARMCC_VERSION) 819a4edab6Sbluhm# define ASSUME(x) __promise(x) 829a4edab6Sbluhm# elif defined(D_PPP_HAS_BUILTIN_UNREACHABLE) 839a4edab6Sbluhm# define ASSUME(x) ((x) ? (void) 0 : __builtin_unreachable()) 849a4edab6Sbluhm# else 859a4edab6Sbluhm# define ASSUME(x) assert(x) 869a4edab6Sbluhm# endif 879a4edab6Sbluhm#endif 889a4edab6Sbluhm 899a4edab6Sbluhm#ifndef NOT_REACHED 909a4edab6Sbluhm# ifdef D_PPP_HAS_BUILTIN_UNREACHABLE 919a4edab6Sbluhm# define NOT_REACHED \ 929a4edab6Sbluhm STMT_START { \ 939a4edab6Sbluhm ASSUME(!"UNREACHABLE"); __builtin_unreachable(); \ 949a4edab6Sbluhm } STMT_END 959a4edab6Sbluhm# elif ! defined(__GNUC__) && (defined(__sun) || defined(__hpux)) 969a4edab6Sbluhm# define NOT_REACHED 979a4edab6Sbluhm# else 989a4edab6Sbluhm# define NOT_REACHED ASSUME(!"UNREACHABLE") 999a4edab6Sbluhm# endif 1009a4edab6Sbluhm#endif 1019a4edab6Sbluhm 1029a4edab6Sbluhm#ifndef WIDEST_UTYPE 1039a4edab6Sbluhm# ifdef QUADKIND 1049a4edab6Sbluhm# ifdef U64TYPE 1059a4edab6Sbluhm# define WIDEST_UTYPE U64TYPE 1069a4edab6Sbluhm# else 1079a4edab6Sbluhm# define WIDEST_UTYPE unsigned Quad_t 1089a4edab6Sbluhm# endif 1099a4edab6Sbluhm# else 1109a4edab6Sbluhm# define WIDEST_UTYPE U32 1119a4edab6Sbluhm# endif 1129a4edab6Sbluhm#endif 1139a4edab6Sbluhm 114de8cc8edSafresh1/* These could become provided if/when they become part of the public API */ 115de8cc8edSafresh1__UNDEF_NOT_PROVIDED__ withinCOUNT(c, l, n) \ 116de8cc8edSafresh1 (((WIDEST_UTYPE) (((c)) - ((l) | 0))) <= (((WIDEST_UTYPE) ((n) | 0)))) 117de8cc8edSafresh1__UNDEF_NOT_PROVIDED__ inRANGE(c, l, u) \ 118de8cc8edSafresh1 ( (sizeof(c) == sizeof(U8)) ? withinCOUNT(((U8) (c)), (l), ((u) - (l))) \ 119de8cc8edSafresh1 : (sizeof(c) == sizeof(U32)) ? withinCOUNT(((U32) (c)), (l), ((u) - (l))) \ 120de8cc8edSafresh1 : (withinCOUNT(((WIDEST_UTYPE) (c)), (l), ((u) - (l))))) 1215759b3d2Safresh1 122de8cc8edSafresh1/* The '| 0' part ensures a compiler error if c is not integer (like e.g., a 123de8cc8edSafresh1 * pointer) */ 124de8cc8edSafresh1#undef FITS_IN_8_BITS /* handy.h version uses a core-only constant */ 125de8cc8edSafresh1__UNDEF_NOT_PROVIDED__ FITS_IN_8_BITS(c) ( (sizeof(c) == 1) \ 126de8cc8edSafresh1 || !(((WIDEST_UTYPE)((c) | 0)) & ~0xFF)) 1275759b3d2Safresh1 128de8cc8edSafresh1/* Create the macro for "is'macro'_utf8_safe(s, e)". For code points below 129de8cc8edSafresh1 * 256, it calls the equivalent _L1 macro by converting the UTF-8 to code 130de8cc8edSafresh1 * point. That is so that it can automatically get the bug fixes done in this 131de8cc8edSafresh1 * file. */ 132de8cc8edSafresh1#define D_PPP_IS_GENERIC_UTF8_SAFE(s, e, macro) \ 133de8cc8edSafresh1 (((e) - (s)) <= 0 \ 134de8cc8edSafresh1 ? 0 \ 135de8cc8edSafresh1 : UTF8_IS_INVARIANT((s)[0]) \ 136de8cc8edSafresh1 ? is ## macro ## _L1((s)[0]) \ 137de8cc8edSafresh1 : (((e) - (s)) < UTF8SKIP(s)) \ 138de8cc8edSafresh1 ? 0 \ 139de8cc8edSafresh1 : UTF8_IS_DOWNGRADEABLE_START((s)[0]) \ 140de8cc8edSafresh1 /* The cast in the line below is only to silence warnings */ \ 141de8cc8edSafresh1 ? is ## macro ## _L1((WIDEST_UTYPE) LATIN1_TO_NATIVE( \ 142de8cc8edSafresh1 UTF8_ACCUMULATE(NATIVE_UTF8_TO_I8((s)[0]) \ 143de8cc8edSafresh1 & UTF_START_MASK(2), \ 144de8cc8edSafresh1 (s)[1]))) \ 145de8cc8edSafresh1 : is ## macro ## _utf8(s)) 146de8cc8edSafresh1 147de8cc8edSafresh1/* Create the macro for "is'macro'_LC_utf8_safe(s, e)". For code points below 148de8cc8edSafresh1 * 256, it calls the equivalent _L1 macro by converting the UTF-8 to code 149de8cc8edSafresh1 * point. That is so that it can automatically get the bug fixes done in this 150de8cc8edSafresh1 * file. */ 151de8cc8edSafresh1#define D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, macro) \ 152de8cc8edSafresh1 (((e) - (s)) <= 0 \ 153de8cc8edSafresh1 ? 0 \ 154de8cc8edSafresh1 : UTF8_IS_INVARIANT((s)[0]) \ 155de8cc8edSafresh1 ? is ## macro ## _LC((s)[0]) \ 156de8cc8edSafresh1 : (((e) - (s)) < UTF8SKIP(s)) \ 157de8cc8edSafresh1 ? 0 \ 158de8cc8edSafresh1 : UTF8_IS_DOWNGRADEABLE_START((s)[0]) \ 159de8cc8edSafresh1 /* The cast in the line below is only to silence warnings */ \ 160de8cc8edSafresh1 ? is ## macro ## _LC((WIDEST_UTYPE) LATIN1_TO_NATIVE( \ 161de8cc8edSafresh1 UTF8_ACCUMULATE(NATIVE_UTF8_TO_I8((s)[0]) \ 162de8cc8edSafresh1 & UTF_START_MASK(2), \ 163de8cc8edSafresh1 (s)[1]))) \ 164de8cc8edSafresh1 : is ## macro ## _utf8(s)) 165de8cc8edSafresh1 166de8cc8edSafresh1/* A few of the early functions are broken. For these and the non-LC case, 167de8cc8edSafresh1 * machine generated code is substituted. But that code doesn't work for 168de8cc8edSafresh1 * locales. This is just like the above macro, but at the end, we call the 169de8cc8edSafresh1 * macro we've generated for the above 255 case, which is correct since locale 170de8cc8edSafresh1 * isn't involved. This will generate extra code to handle the 0-255 inputs, 171de8cc8edSafresh1 * but hopefully it will be optimized out by the C compiler. But just in case 172de8cc8edSafresh1 * it isn't, this macro is only used on the few versions that are broken */ 173de8cc8edSafresh1 174de8cc8edSafresh1#define D_PPP_IS_GENERIC_LC_UTF8_SAFE_BROKEN(s, e, macro) \ 175de8cc8edSafresh1 (((e) - (s)) <= 0 \ 176de8cc8edSafresh1 ? 0 \ 177de8cc8edSafresh1 : UTF8_IS_INVARIANT((s)[0]) \ 178de8cc8edSafresh1 ? is ## macro ## _LC((s)[0]) \ 179de8cc8edSafresh1 : (((e) - (s)) < UTF8SKIP(s)) \ 180de8cc8edSafresh1 ? 0 \ 181de8cc8edSafresh1 : UTF8_IS_DOWNGRADEABLE_START((s)[0]) \ 182de8cc8edSafresh1 /* The cast in the line below is only to silence warnings */ \ 183de8cc8edSafresh1 ? is ## macro ## _LC((WIDEST_UTYPE) LATIN1_TO_NATIVE( \ 184de8cc8edSafresh1 UTF8_ACCUMULATE(NATIVE_UTF8_TO_I8((s)[0]) \ 185de8cc8edSafresh1 & UTF_START_MASK(2), \ 186de8cc8edSafresh1 (s)[1]))) \ 187de8cc8edSafresh1 : is ## macro ## _utf8_safe(s, e)) 188de8cc8edSafresh1 189de8cc8edSafresh1__UNDEFINED__ SvRX(rv) (SvROK((rv)) ? (SvMAGICAL(SvRV((rv))) ? (mg_find(SvRV((rv)), PERL_MAGIC_qr) ? mg_find(SvRV((rv)), PERL_MAGIC_qr)->mg_obj : NULL) : NULL) : NULL) 1905759b3d2Safresh1__UNDEFINED__ SvRXOK(sv) (!!SvRX(sv)) 1915759b3d2Safresh1 1925759b3d2Safresh1#ifndef PERL_UNUSED_DECL 1935759b3d2Safresh1# ifdef HASATTRIBUTE 1945759b3d2Safresh1# if (defined(__GNUC__) && defined(__cplusplus)) || defined(__INTEL_COMPILER) 1955759b3d2Safresh1# define PERL_UNUSED_DECL 1965759b3d2Safresh1# else 1975759b3d2Safresh1# define PERL_UNUSED_DECL __attribute__((unused)) 1985759b3d2Safresh1# endif 1995759b3d2Safresh1# else 2005759b3d2Safresh1# define PERL_UNUSED_DECL 2015759b3d2Safresh1# endif 2025759b3d2Safresh1#endif 2035759b3d2Safresh1 2045759b3d2Safresh1#ifndef PERL_UNUSED_ARG 2055759b3d2Safresh1# if defined(lint) && defined(S_SPLINT_S) /* www.splint.org */ 2065759b3d2Safresh1# include <note.h> 2075759b3d2Safresh1# define PERL_UNUSED_ARG(x) NOTE(ARGUNUSED(x)) 2085759b3d2Safresh1# else 2095759b3d2Safresh1# define PERL_UNUSED_ARG(x) ((void)x) 2105759b3d2Safresh1# endif 2115759b3d2Safresh1#endif 2125759b3d2Safresh1 2135759b3d2Safresh1#ifndef PERL_UNUSED_VAR 2145759b3d2Safresh1# define PERL_UNUSED_VAR(x) ((void)x) 2155759b3d2Safresh1#endif 2165759b3d2Safresh1 2175759b3d2Safresh1#ifndef PERL_UNUSED_CONTEXT 2185759b3d2Safresh1# ifdef USE_ITHREADS 2195759b3d2Safresh1# define PERL_UNUSED_CONTEXT PERL_UNUSED_ARG(my_perl) 2205759b3d2Safresh1# else 2215759b3d2Safresh1# define PERL_UNUSED_CONTEXT 2225759b3d2Safresh1# endif 2235759b3d2Safresh1#endif 2245759b3d2Safresh1 2255759b3d2Safresh1#ifndef PERL_UNUSED_RESULT 2265759b3d2Safresh1# if defined(__GNUC__) && defined(HASATTRIBUTE_WARN_UNUSED_RESULT) 2275759b3d2Safresh1# define PERL_UNUSED_RESULT(v) STMT_START { __typeof__(v) z = (v); (void)sizeof(z); } STMT_END 2285759b3d2Safresh1# else 2295759b3d2Safresh1# define PERL_UNUSED_RESULT(v) ((void)(v)) 2305759b3d2Safresh1# endif 2315759b3d2Safresh1#endif 2325759b3d2Safresh1 2335759b3d2Safresh1__UNDEFINED__ NOOP /*EMPTY*/(void)0 234eac174f2Safresh1 235eac174f2Safresh1#if { VERSION < 5.6.1 } && { VERSION < 5.27.7 } 236*3d61058aSafresh1__REDEFINE__ dNOOP struct Perl___notused_struct 237eac174f2Safresh1#endif 2385759b3d2Safresh1 2395759b3d2Safresh1#ifndef NVTYPE 2405759b3d2Safresh1# if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) 2415759b3d2Safresh1# define NVTYPE long double 2425759b3d2Safresh1# else 2435759b3d2Safresh1# define NVTYPE double 2445759b3d2Safresh1# endif 2455759b3d2Safresh1typedef NVTYPE NV; 2465759b3d2Safresh1#endif 2475759b3d2Safresh1 2485759b3d2Safresh1#ifndef INT2PTR 2495759b3d2Safresh1# if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE) 2505759b3d2Safresh1# define PTRV UV 2515759b3d2Safresh1# define INT2PTR(any,d) (any)(d) 2525759b3d2Safresh1# else 2535759b3d2Safresh1# if PTRSIZE == LONGSIZE 2545759b3d2Safresh1# define PTRV unsigned long 2555759b3d2Safresh1# else 2565759b3d2Safresh1# define PTRV unsigned 2575759b3d2Safresh1# endif 2585759b3d2Safresh1# define INT2PTR(any,d) (any)(PTRV)(d) 2595759b3d2Safresh1# endif 2605759b3d2Safresh1#endif 2615759b3d2Safresh1 2625759b3d2Safresh1#ifndef PTR2ul 2635759b3d2Safresh1# if PTRSIZE == LONGSIZE 2645759b3d2Safresh1# define PTR2ul(p) (unsigned long)(p) 2655759b3d2Safresh1# else 2665759b3d2Safresh1# define PTR2ul(p) INT2PTR(unsigned long,p) 2675759b3d2Safresh1# endif 2685759b3d2Safresh1#endif 2695759b3d2Safresh1 270*3d61058aSafresh1#ifndef PERL_STACK_OFFSET_DEFINED 271*3d61058aSafresh1 typedef I32 Stack_off_t; 272*3d61058aSafresh1# define Stack_off_t_MAX I32_MAX 273*3d61058aSafresh1# define PERL_STACK_OFFSET_DEFINED 274*3d61058aSafresh1#endif 275*3d61058aSafresh1 2765759b3d2Safresh1__UNDEFINED__ PTR2nat(p) (PTRV)(p) 2775759b3d2Safresh1__UNDEFINED__ NUM2PTR(any,d) (any)PTR2nat(d) 2785759b3d2Safresh1__UNDEFINED__ PTR2IV(p) INT2PTR(IV,p) 2795759b3d2Safresh1__UNDEFINED__ PTR2UV(p) INT2PTR(UV,p) 2805759b3d2Safresh1__UNDEFINED__ PTR2NV(p) NUM2PTR(NV,p) 2815759b3d2Safresh1 2825759b3d2Safresh1#ifdef __cplusplus 283*3d61058aSafresh1__REDEFINE__ START_EXTERN_C extern "C" { 284*3d61058aSafresh1__REDEFINE__ END_EXTERN_C } 285*3d61058aSafresh1__REDEFINE__ EXTERN_C extern "C" 2865759b3d2Safresh1#else 287*3d61058aSafresh1__REDEFINE__ START_EXTERN_C 288*3d61058aSafresh1__REDEFINE__ END_EXTERN_C 289*3d61058aSafresh1__REDEFINE__ EXTERN_C extern 2905759b3d2Safresh1#endif 2915759b3d2Safresh1 292de8cc8edSafresh1#if { VERSION < 5.004 } || defined(PERL_GCC_PEDANTIC) 2935759b3d2Safresh1# ifndef PERL_GCC_BRACE_GROUPS_FORBIDDEN 294de8cc8edSafresh1__UNDEF_NOT_PROVIDED__ PERL_GCC_BRACE_GROUPS_FORBIDDEN 2955759b3d2Safresh1# endif 2965759b3d2Safresh1#endif 2975759b3d2Safresh1 298eac174f2Safresh1#if ! defined(__GNUC__) || defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) || defined(__cplusplus) 299eac174f2Safresh1# undef PERL_USE_GCC_BRACE_GROUPS 300eac174f2Safresh1#else 3015759b3d2Safresh1# ifndef PERL_USE_GCC_BRACE_GROUPS 3025759b3d2Safresh1# define PERL_USE_GCC_BRACE_GROUPS 3035759b3d2Safresh1# endif 3045759b3d2Safresh1#endif 3055759b3d2Safresh1 3065759b3d2Safresh1#if defined(VOIDFLAGS) && (VOIDFLAGS) && (defined(sun) || defined(__sun__)) && !defined(__GNUC__) 307*3d61058aSafresh1__REDEFINE__ STMT_START if (1) 308*3d61058aSafresh1__REDEFINE__ STMT_END else (void)0 3095759b3d2Safresh1#else 310*3d61058aSafresh1__REDEFINE__ STMT_START do 311*3d61058aSafresh1__REDEFINE__ STMT_END while (0) 3125759b3d2Safresh1#endif 3135759b3d2Safresh1 3145759b3d2Safresh1__UNDEFINED__ boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no) 3155759b3d2Safresh1 3165759b3d2Safresh1/* DEFSV appears first in 5.004_56 */ 3175759b3d2Safresh1__UNDEFINED__ DEFSV GvSV(PL_defgv) 3185759b3d2Safresh1__UNDEFINED__ SAVE_DEFSV SAVESPTR(GvSV(PL_defgv)) 3195759b3d2Safresh1__UNDEFINED__ DEFSV_set(sv) (DEFSV = (sv)) 3205759b3d2Safresh1 3215759b3d2Safresh1/* Older perls (<=5.003) lack AvFILLp */ 3225759b3d2Safresh1__UNDEFINED__ AvFILLp AvFILL 3235759b3d2Safresh1 324f3efcd01Safresh1__UNDEFINED__ av_tindex AvFILL 325f3efcd01Safresh1__UNDEFINED__ av_top_index AvFILL 3269a4edab6Sbluhm__UNDEFINED__ av_count(av) (AvFILL(av)+1) 327f3efcd01Safresh1 3285759b3d2Safresh1__UNDEFINED__ ERRSV get_sv("@",FALSE) 3295759b3d2Safresh1 3305759b3d2Safresh1/* Hint: gv_stashpvn 3315759b3d2Safresh1 * This function's backport doesn't support the length parameter, but 3325759b3d2Safresh1 * rather ignores it. Portability can only be ensured if the length 3335759b3d2Safresh1 * parameter is used for speed reasons, but the length can always be 3345759b3d2Safresh1 * correctly computed from the string argument. 3355759b3d2Safresh1 */ 3365759b3d2Safresh1 3375759b3d2Safresh1__UNDEFINED__ gv_stashpvn(str,len,create) gv_stashpv(str,create) 3385759b3d2Safresh1 3395759b3d2Safresh1/* Replace: 1 */ 3405759b3d2Safresh1__UNDEFINED__ get_cv perl_get_cv 3415759b3d2Safresh1__UNDEFINED__ get_sv perl_get_sv 3425759b3d2Safresh1__UNDEFINED__ get_av perl_get_av 3435759b3d2Safresh1__UNDEFINED__ get_hv perl_get_hv 3445759b3d2Safresh1/* Replace: 0 */ 3455759b3d2Safresh1 3465759b3d2Safresh1__UNDEFINED__ dUNDERBAR dNOOP 3475759b3d2Safresh1__UNDEFINED__ UNDERBAR DEFSV 3485759b3d2Safresh1 3495759b3d2Safresh1__UNDEFINED__ dAX I32 ax = MARK - PL_stack_base + 1 3505759b3d2Safresh1__UNDEFINED__ dITEMS I32 items = SP - MARK 3515759b3d2Safresh1 3525759b3d2Safresh1__UNDEFINED__ dXSTARG SV * targ = sv_newmortal() 3535759b3d2Safresh1 3545759b3d2Safresh1__UNDEFINED__ dAXMARK I32 ax = POPMARK; \ 3559a4edab6Sbluhm SV ** const mark = PL_stack_base + ax++ 3565759b3d2Safresh1 3575759b3d2Safresh1 3585759b3d2Safresh1__UNDEFINED__ XSprePUSH (sp = PL_stack_base + ax - 1) 3595759b3d2Safresh1 3605759b3d2Safresh1#if { VERSION < 5.005 } 361*3d61058aSafresh1__REDEFINE__ XSRETURN(off) \ 3625759b3d2Safresh1 STMT_START { \ 3635759b3d2Safresh1 PL_stack_sp = PL_stack_base + ax + ((off) - 1); \ 3645759b3d2Safresh1 return; \ 3655759b3d2Safresh1 } STMT_END 3665759b3d2Safresh1#endif 3675759b3d2Safresh1 3685759b3d2Safresh1__UNDEFINED__ XSPROTO(name) void name(pTHX_ CV* cv) 3695759b3d2Safresh1__UNDEFINED__ SVfARG(p) ((void*)(p)) 3705759b3d2Safresh1 3715759b3d2Safresh1__UNDEFINED__ PERL_ABS(x) ((x) < 0 ? -(x) : (x)) 3725759b3d2Safresh1 3735759b3d2Safresh1__UNDEFINED__ dVAR dNOOP 3745759b3d2Safresh1 3755759b3d2Safresh1__UNDEFINED__ SVf "_" 3765759b3d2Safresh1 3775759b3d2Safresh1__UNDEFINED__ CPERLscope(x) x 3785759b3d2Safresh1 3795759b3d2Safresh1__UNDEFINED__ PERL_HASH(hash,str,len) \ 3805759b3d2Safresh1 STMT_START { \ 3815759b3d2Safresh1 const char *s_PeRlHaSh = str; \ 3825759b3d2Safresh1 I32 i_PeRlHaSh = len; \ 3835759b3d2Safresh1 U32 hash_PeRlHaSh = 0; \ 3845759b3d2Safresh1 while (i_PeRlHaSh--) \ 3855759b3d2Safresh1 hash_PeRlHaSh = hash_PeRlHaSh * 33 + *s_PeRlHaSh++; \ 3865759b3d2Safresh1 (hash) = hash_PeRlHaSh; \ 3875759b3d2Safresh1 } STMT_END 3885759b3d2Safresh1 3895759b3d2Safresh1#ifndef PERLIO_FUNCS_DECL 3905759b3d2Safresh1# ifdef PERLIO_FUNCS_CONST 3915759b3d2Safresh1# define PERLIO_FUNCS_DECL(funcs) const PerlIO_funcs funcs 3925759b3d2Safresh1# define PERLIO_FUNCS_CAST(funcs) (PerlIO_funcs*)(funcs) 3935759b3d2Safresh1# else 3945759b3d2Safresh1# define PERLIO_FUNCS_DECL(funcs) PerlIO_funcs funcs 3955759b3d2Safresh1# define PERLIO_FUNCS_CAST(funcs) (funcs) 3965759b3d2Safresh1# endif 3975759b3d2Safresh1#endif 3985759b3d2Safresh1 3995759b3d2Safresh1/* provide these typedefs for older perls */ 4005759b3d2Safresh1#if { VERSION < 5.9.3 } 4015759b3d2Safresh1 4025759b3d2Safresh1# ifdef ARGSproto 4035759b3d2Safresh1typedef OP* (CPERLscope(*Perl_ppaddr_t))(ARGSproto); 4045759b3d2Safresh1# else 4055759b3d2Safresh1typedef OP* (CPERLscope(*Perl_ppaddr_t))(pTHX); 4065759b3d2Safresh1# endif 4075759b3d2Safresh1 4085759b3d2Safresh1typedef OP* (CPERLscope(*Perl_check_t)) (pTHX_ OP*); 4095759b3d2Safresh1 4105759b3d2Safresh1#endif 4115759b3d2Safresh1 412de8cc8edSafresh1/* On versions without NATIVE_TO_ASCII, only ASCII is supported */ 413de8cc8edSafresh1#if defined(EBCDIC) && defined(NATIVE_TO_ASCI) 414de8cc8edSafresh1__UNDEFINED__ NATIVE_TO_LATIN1(c) NATIVE_TO_ASCII(c) 415de8cc8edSafresh1__UNDEFINED__ LATIN1_TO_NATIVE(c) ASCII_TO_NATIVE(c) 416de8cc8edSafresh1__UNDEFINED__ NATIVE_TO_UNI(c) ((c) > 255 ? (c) : NATIVE_TO_LATIN1(c)) 417de8cc8edSafresh1__UNDEFINED__ UNI_TO_NATIVE(c) ((c) > 255 ? (c) : LATIN1_TO_NATIVE(c)) 418de8cc8edSafresh1#else 419de8cc8edSafresh1__UNDEFINED__ NATIVE_TO_LATIN1(c) (c) 420de8cc8edSafresh1__UNDEFINED__ LATIN1_TO_NATIVE(c) (c) 421de8cc8edSafresh1__UNDEFINED__ NATIVE_TO_UNI(c) (c) 422de8cc8edSafresh1__UNDEFINED__ UNI_TO_NATIVE(c) (c) 423de8cc8edSafresh1#endif 424de8cc8edSafresh1 425de8cc8edSafresh1/* Warning: LATIN1_TO_NATIVE, NATIVE_TO_LATIN1 NATIVE_TO_UNI UNI_TO_NATIVE 426de8cc8edSafresh1 EBCDIC is not supported on versions earlier than 5.7.1 427de8cc8edSafresh1 */ 428de8cc8edSafresh1 429de8cc8edSafresh1/* The meaning of this changed; use the modern version */ 430de8cc8edSafresh1#undef isPSXSPC 431de8cc8edSafresh1#undef isPSXSPC_A 432de8cc8edSafresh1#undef isPSXSPC_L1 433de8cc8edSafresh1 434de8cc8edSafresh1/* Hint: isPSXSPC, isPSXSPC_A, isPSXSPC_L1, isPSXSPC_utf8_safe 435de8cc8edSafresh1 This is equivalent to the corresponding isSPACE-type macro. On perls 436de8cc8edSafresh1 before 5.18, this matched a vertical tab and SPACE didn't. But the 437de8cc8edSafresh1 ppport.h SPACE version does match VT in all perl releases. Since VT's are 438de8cc8edSafresh1 extremely rarely found in real-life files, this difference effectively 439de8cc8edSafresh1 doesn't matter */ 440de8cc8edSafresh1 441de8cc8edSafresh1/* Hint: isSPACE, isSPACE_A, isSPACE_L1, isSPACE_utf8_safe 442de8cc8edSafresh1 Until Perl 5.18, this did not match the vertical tab (VT). The ppport.h 443de8cc8edSafresh1 version does match it in all perl releases. Since VT's are extremely rarely 444de8cc8edSafresh1 found in real-life files, this difference effectively doesn't matter */ 445de8cc8edSafresh1 446f3efcd01Safresh1#ifdef EBCDIC 447f3efcd01Safresh1 448de8cc8edSafresh1/* This is the first version where these macros are fully correct on EBCDIC 4499a4edab6Sbluhm * platforms. Relying on the C library functions, as earlier releases did, 4509a4edab6Sbluhm * causes problems with locales */ 451f3efcd01Safresh1# if { VERSION < 5.22.0 } 452f3efcd01Safresh1# undef isALNUM 453f3efcd01Safresh1# undef isALNUM_A 454de8cc8edSafresh1# undef isALNUM_L1 455f3efcd01Safresh1# undef isALNUMC 456f3efcd01Safresh1# undef isALNUMC_A 457de8cc8edSafresh1# undef isALNUMC_L1 458f3efcd01Safresh1# undef isALPHA 459f3efcd01Safresh1# undef isALPHA_A 460de8cc8edSafresh1# undef isALPHA_L1 461f3efcd01Safresh1# undef isALPHANUMERIC 462f3efcd01Safresh1# undef isALPHANUMERIC_A 463de8cc8edSafresh1# undef isALPHANUMERIC_L1 464f3efcd01Safresh1# undef isASCII 465f3efcd01Safresh1# undef isASCII_A 466de8cc8edSafresh1# undef isASCII_L1 467f3efcd01Safresh1# undef isBLANK 468f3efcd01Safresh1# undef isBLANK_A 469de8cc8edSafresh1# undef isBLANK_L1 470f3efcd01Safresh1# undef isCNTRL 471f3efcd01Safresh1# undef isCNTRL_A 472de8cc8edSafresh1# undef isCNTRL_L1 473f3efcd01Safresh1# undef isDIGIT 474f3efcd01Safresh1# undef isDIGIT_A 475de8cc8edSafresh1# undef isDIGIT_L1 476f3efcd01Safresh1# undef isGRAPH 477f3efcd01Safresh1# undef isGRAPH_A 478de8cc8edSafresh1# undef isGRAPH_L1 479f3efcd01Safresh1# undef isIDCONT 480f3efcd01Safresh1# undef isIDCONT_A 481de8cc8edSafresh1# undef isIDCONT_L1 482f3efcd01Safresh1# undef isIDFIRST 483f3efcd01Safresh1# undef isIDFIRST_A 484de8cc8edSafresh1# undef isIDFIRST_L1 485f3efcd01Safresh1# undef isLOWER 486f3efcd01Safresh1# undef isLOWER_A 487de8cc8edSafresh1# undef isLOWER_L1 488f3efcd01Safresh1# undef isOCTAL 489f3efcd01Safresh1# undef isOCTAL_A 490de8cc8edSafresh1# undef isOCTAL_L1 491f3efcd01Safresh1# undef isPRINT 492f3efcd01Safresh1# undef isPRINT_A 493de8cc8edSafresh1# undef isPRINT_L1 494f3efcd01Safresh1# undef isPUNCT 495f3efcd01Safresh1# undef isPUNCT_A 496de8cc8edSafresh1# undef isPUNCT_L1 497f3efcd01Safresh1# undef isSPACE 498f3efcd01Safresh1# undef isSPACE_A 499de8cc8edSafresh1# undef isSPACE_L1 500f3efcd01Safresh1# undef isUPPER 501f3efcd01Safresh1# undef isUPPER_A 502de8cc8edSafresh1# undef isUPPER_L1 503f3efcd01Safresh1# undef isWORDCHAR 504f3efcd01Safresh1# undef isWORDCHAR_A 505de8cc8edSafresh1# undef isWORDCHAR_L1 506f3efcd01Safresh1# undef isXDIGIT 507f3efcd01Safresh1# undef isXDIGIT_A 508de8cc8edSafresh1# undef isXDIGIT_L1 509f3efcd01Safresh1# endif 510f3efcd01Safresh1 511f3efcd01Safresh1__UNDEFINED__ isASCII(c) (isCNTRL(c) || isPRINT(c)) 512f3efcd01Safresh1 513f3efcd01Safresh1 /* The below is accurate for all EBCDIC code pages supported by 514f3efcd01Safresh1 * all the versions of Perl overridden by this */ 515f3efcd01Safresh1__UNDEFINED__ isCNTRL(c) ( (c) == '\0' || (c) == '\a' || (c) == '\b' \ 516f3efcd01Safresh1 || (c) == '\f' || (c) == '\n' || (c) == '\r' \ 517f3efcd01Safresh1 || (c) == '\t' || (c) == '\v' \ 518f3efcd01Safresh1 || ((c) <= 3 && (c) >= 1) /* SOH, STX, ETX */ \ 519f3efcd01Safresh1 || (c) == 7 /* U+7F DEL */ \ 520f3efcd01Safresh1 || ((c) <= 0x13 && (c) >= 0x0E) /* SO, SI */ \ 521f3efcd01Safresh1 /* DLE, DC[1-3] */ \ 522f3efcd01Safresh1 || (c) == 0x18 /* U+18 CAN */ \ 523f3efcd01Safresh1 || (c) == 0x19 /* U+19 EOM */ \ 524f3efcd01Safresh1 || ((c) <= 0x1F && (c) >= 0x1C) /* [FGRU]S */ \ 525f3efcd01Safresh1 || (c) == 0x26 /* U+17 ETB */ \ 526f3efcd01Safresh1 || (c) == 0x27 /* U+1B ESC */ \ 527f3efcd01Safresh1 || (c) == 0x2D /* U+05 ENQ */ \ 528f3efcd01Safresh1 || (c) == 0x2E /* U+06 ACK */ \ 529f3efcd01Safresh1 || (c) == 0x32 /* U+16 SYN */ \ 530f3efcd01Safresh1 || (c) == 0x37 /* U+04 EOT */ \ 531f3efcd01Safresh1 || (c) == 0x3C /* U+14 DC4 */ \ 532f3efcd01Safresh1 || (c) == 0x3D /* U+15 NAK */ \ 533f3efcd01Safresh1 || (c) == 0x3F /* U+1A SUB */ \ 534f3efcd01Safresh1 ) 535de8cc8edSafresh1 536de8cc8edSafresh1#if '^' == 106 /* EBCDIC POSIX-BC */ 537de8cc8edSafresh1# define D_PPP_OUTLIER_CONTROL 0x5F 538de8cc8edSafresh1#else /* EBCDIC 1047 037 */ 539de8cc8edSafresh1# define D_PPP_OUTLIER_CONTROL 0xFF 540de8cc8edSafresh1#endif 541de8cc8edSafresh1 542de8cc8edSafresh1/* The controls are everything below blank, plus one outlier */ 543de8cc8edSafresh1__UNDEFINED__ isCNTRL_L1(c) ((WIDEST_UTYPE) (c) < ' ' \ 544de8cc8edSafresh1 || (WIDEST_UTYPE) (c) == D_PPP_OUTLIER_CONTROL) 545f3efcd01Safresh1/* The ordering of the tests in this and isUPPER are to exclude most characters 546f3efcd01Safresh1 * early */ 547f3efcd01Safresh1__UNDEFINED__ isLOWER(c) ( (c) >= 'a' && (c) <= 'z' \ 548f3efcd01Safresh1 && ( (c) <= 'i' \ 549f3efcd01Safresh1 || ((c) >= 'j' && (c) <= 'r') \ 550f3efcd01Safresh1 || (c) >= 's')) 551f3efcd01Safresh1__UNDEFINED__ isUPPER(c) ( (c) >= 'A' && (c) <= 'Z' \ 552f3efcd01Safresh1 && ( (c) <= 'I' \ 553f3efcd01Safresh1 || ((c) >= 'J' && (c) <= 'R') \ 554f3efcd01Safresh1 || (c) >= 'S')) 555f3efcd01Safresh1 556f3efcd01Safresh1#else /* Above is EBCDIC; below is ASCII */ 557f3efcd01Safresh1 558f3efcd01Safresh1# if { VERSION < 5.4.0 } 559f3efcd01Safresh1/* The implementation of these in older perl versions can give wrong results if 560f3efcd01Safresh1 * the C program locale is set to other than the C locale */ 561f3efcd01Safresh1# undef isALNUM 562f3efcd01Safresh1# undef isALNUM_A 563f3efcd01Safresh1# undef isALPHA 564f3efcd01Safresh1# undef isALPHA_A 565f3efcd01Safresh1# undef isDIGIT 566f3efcd01Safresh1# undef isDIGIT_A 567f3efcd01Safresh1# undef isIDFIRST 568f3efcd01Safresh1# undef isIDFIRST_A 569f3efcd01Safresh1# undef isLOWER 570f3efcd01Safresh1# undef isLOWER_A 571f3efcd01Safresh1# undef isUPPER 572f3efcd01Safresh1# undef isUPPER_A 573f3efcd01Safresh1# endif 574f3efcd01Safresh1 575de8cc8edSafresh1# if { VERSION == 5.7.0 } /* this perl made space GRAPH */ 576de8cc8edSafresh1# undef isGRAPH 577de8cc8edSafresh1# endif 578de8cc8edSafresh1 579de8cc8edSafresh1# if { VERSION < 5.8.0 } /* earlier perls omitted DEL */ 580f3efcd01Safresh1# undef isCNTRL 581f3efcd01Safresh1# endif 582f3efcd01Safresh1 583f3efcd01Safresh1# if { VERSION < 5.10.0 } 584de8cc8edSafresh1/* earlier perls included all of the isSPACE() characters, which is wrong. The 585de8cc8edSafresh1 * version provided by Devel::PPPort always overrides an existing buggy 586de8cc8edSafresh1 * version. */ 587f3efcd01Safresh1# undef isPRINT 588f3efcd01Safresh1# undef isPRINT_A 589f3efcd01Safresh1# endif 590f3efcd01Safresh1 591f3efcd01Safresh1# if { VERSION < 5.14.0 } 592de8cc8edSafresh1/* earlier perls always returned true if the parameter was a signed char */ 593f3efcd01Safresh1# undef isASCII 594f3efcd01Safresh1# undef isASCII_A 595f3efcd01Safresh1# endif 596f3efcd01Safresh1 597de8cc8edSafresh1# if { VERSION < 5.17.8 } /* earlier perls didn't include PILCROW, SECTION SIGN */ 598de8cc8edSafresh1# undef isPUNCT_L1 599de8cc8edSafresh1# endif 600de8cc8edSafresh1 601de8cc8edSafresh1# if { VERSION < 5.13.7 } /* khw didn't investigate why this failed */ 602de8cc8edSafresh1# undef isALNUMC_L1 603de8cc8edSafresh1#endif 604de8cc8edSafresh1 605de8cc8edSafresh1# if { VERSION < 5.20.0 } /* earlier perls didn't include \v */ 606f3efcd01Safresh1# undef isSPACE 607f3efcd01Safresh1# undef isSPACE_A 608de8cc8edSafresh1# undef isSPACE_L1 609de8cc8edSafresh1 610f3efcd01Safresh1# endif 611f3efcd01Safresh1 6125759b3d2Safresh1__UNDEFINED__ isASCII(c) ((WIDEST_UTYPE) (c) <= 127) 6135759b3d2Safresh1__UNDEFINED__ isCNTRL(c) ((WIDEST_UTYPE) (c) < ' ' || (c) == 127) 6149a4edab6Sbluhm__UNDEFINED__ isCNTRL_L1(c) ( (WIDEST_UTYPE) (c) < ' ' \ 6159a4edab6Sbluhm || inRANGE((c), 0x7F, 0x9F)) 6169a4edab6Sbluhm__UNDEFINED__ isLOWER(c) inRANGE((c), 'a', 'z') 6179a4edab6Sbluhm__UNDEFINED__ isUPPER(c) inRANGE((c), 'A', 'Z') 618de8cc8edSafresh1 619f3efcd01Safresh1#endif /* Below are definitions common to EBCDIC and ASCII */ 620f3efcd01Safresh1 621de8cc8edSafresh1__UNDEFINED__ isASCII_L1(c) isASCII(c) 622de8cc8edSafresh1__UNDEFINED__ isASCII_LC(c) isASCII(c) 623f3efcd01Safresh1__UNDEFINED__ isALNUM(c) isWORDCHAR(c) 624f3efcd01Safresh1__UNDEFINED__ isALNUMC(c) isALPHANUMERIC(c) 625de8cc8edSafresh1__UNDEFINED__ isALNUMC_L1(c) isALPHANUMERIC_L1(c) 626f3efcd01Safresh1__UNDEFINED__ isALPHA(c) (isUPPER(c) || isLOWER(c)) 627de8cc8edSafresh1__UNDEFINED__ isALPHA_L1(c) (isUPPER_L1(c) || isLOWER_L1(c)) 628f3efcd01Safresh1__UNDEFINED__ isALPHANUMERIC(c) (isALPHA(c) || isDIGIT(c)) 629de8cc8edSafresh1__UNDEFINED__ isALPHANUMERIC_L1(c) (isALPHA_L1(c) || isDIGIT(c)) 630de8cc8edSafresh1__UNDEFINED__ isALPHANUMERIC_LC(c) (isALPHA_LC(c) || isDIGIT_LC(c)) 631f3efcd01Safresh1__UNDEFINED__ isBLANK(c) ((c) == ' ' || (c) == '\t') 632de8cc8edSafresh1__UNDEFINED__ isBLANK_L1(c) ( isBLANK(c) \ 633de8cc8edSafresh1 || ( FITS_IN_8_BITS(c) \ 634de8cc8edSafresh1 && NATIVE_TO_LATIN1((U8) c) == 0xA0)) 635de8cc8edSafresh1__UNDEFINED__ isBLANK_LC(c) isBLANK(c) 636de8cc8edSafresh1__UNDEFINED__ isDIGIT(c) inRANGE(c, '0', '9') 637de8cc8edSafresh1__UNDEFINED__ isDIGIT_L1(c) isDIGIT(c) 638f3efcd01Safresh1__UNDEFINED__ isGRAPH(c) (isWORDCHAR(c) || isPUNCT(c)) 639de8cc8edSafresh1__UNDEFINED__ isGRAPH_L1(c) ( isPRINT_L1(c) \ 640de8cc8edSafresh1 && (c) != ' ' \ 641de8cc8edSafresh1 && NATIVE_TO_LATIN1((U8) c) != 0xA0) 642f3efcd01Safresh1__UNDEFINED__ isIDCONT(c) isWORDCHAR(c) 643de8cc8edSafresh1__UNDEFINED__ isIDCONT_L1(c) isWORDCHAR_L1(c) 644de8cc8edSafresh1__UNDEFINED__ isIDCONT_LC(c) isWORDCHAR_LC(c) 645f3efcd01Safresh1__UNDEFINED__ isIDFIRST(c) (isALPHA(c) || (c) == '_') 646de8cc8edSafresh1__UNDEFINED__ isIDFIRST_L1(c) (isALPHA_L1(c) || (U8) (c) == '_') 647de8cc8edSafresh1__UNDEFINED__ isIDFIRST_LC(c) (isALPHA_LC(c) || (U8) (c) == '_') 648de8cc8edSafresh1__UNDEFINED__ isLOWER_L1(c) ( isLOWER(c) \ 649de8cc8edSafresh1 || ( FITS_IN_8_BITS(c) \ 650de8cc8edSafresh1 && ( ( NATIVE_TO_LATIN1((U8) c) >= 0xDF \ 651de8cc8edSafresh1 && NATIVE_TO_LATIN1((U8) c) != 0xF7) \ 652de8cc8edSafresh1 || NATIVE_TO_LATIN1((U8) c) == 0xAA \ 653de8cc8edSafresh1 || NATIVE_TO_LATIN1((U8) c) == 0xBA \ 654de8cc8edSafresh1 || NATIVE_TO_LATIN1((U8) c) == 0xB5))) 655f3efcd01Safresh1__UNDEFINED__ isOCTAL(c) (((WIDEST_UTYPE)((c)) & ~7) == '0') 656de8cc8edSafresh1__UNDEFINED__ isOCTAL_L1(c) isOCTAL(c) 657f3efcd01Safresh1__UNDEFINED__ isPRINT(c) (isGRAPH(c) || (c) == ' ') 658de8cc8edSafresh1__UNDEFINED__ isPRINT_L1(c) (FITS_IN_8_BITS(c) && ! isCNTRL_L1(c)) 659f3efcd01Safresh1__UNDEFINED__ isPSXSPC(c) isSPACE(c) 660de8cc8edSafresh1__UNDEFINED__ isPSXSPC_L1(c) isSPACE_L1(c) 661f3efcd01Safresh1__UNDEFINED__ isPUNCT(c) ( (c) == '-' || (c) == '!' || (c) == '"' \ 662f3efcd01Safresh1 || (c) == '#' || (c) == '$' || (c) == '%' \ 663f3efcd01Safresh1 || (c) == '&' || (c) == '\'' || (c) == '(' \ 664f3efcd01Safresh1 || (c) == ')' || (c) == '*' || (c) == '+' \ 665f3efcd01Safresh1 || (c) == ',' || (c) == '.' || (c) == '/' \ 666f3efcd01Safresh1 || (c) == ':' || (c) == ';' || (c) == '<' \ 667f3efcd01Safresh1 || (c) == '=' || (c) == '>' || (c) == '?' \ 668f3efcd01Safresh1 || (c) == '@' || (c) == '[' || (c) == '\\' \ 669f3efcd01Safresh1 || (c) == ']' || (c) == '^' || (c) == '_' \ 670f3efcd01Safresh1 || (c) == '`' || (c) == '{' || (c) == '|' \ 671f3efcd01Safresh1 || (c) == '}' || (c) == '~') 672de8cc8edSafresh1__UNDEFINED__ isPUNCT_L1(c) ( isPUNCT(c) \ 673de8cc8edSafresh1 || ( FITS_IN_8_BITS(c) \ 674de8cc8edSafresh1 && ( NATIVE_TO_LATIN1((U8) c) == 0xA1 \ 675de8cc8edSafresh1 || NATIVE_TO_LATIN1((U8) c) == 0xA7 \ 676de8cc8edSafresh1 || NATIVE_TO_LATIN1((U8) c) == 0xAB \ 677de8cc8edSafresh1 || NATIVE_TO_LATIN1((U8) c) == 0xB6 \ 678de8cc8edSafresh1 || NATIVE_TO_LATIN1((U8) c) == 0xB7 \ 679de8cc8edSafresh1 || NATIVE_TO_LATIN1((U8) c) == 0xBB \ 680de8cc8edSafresh1 || NATIVE_TO_LATIN1((U8) c) == 0xBF))) 681f3efcd01Safresh1__UNDEFINED__ isSPACE(c) ( isBLANK(c) || (c) == '\n' || (c) == '\r' \ 682f3efcd01Safresh1 || (c) == '\v' || (c) == '\f') 683de8cc8edSafresh1__UNDEFINED__ isSPACE_L1(c) ( isSPACE(c) \ 684de8cc8edSafresh1 || (FITS_IN_8_BITS(c) \ 685de8cc8edSafresh1 && ( NATIVE_TO_LATIN1((U8) c) == 0x85 \ 686de8cc8edSafresh1 || NATIVE_TO_LATIN1((U8) c) == 0xA0))) 687de8cc8edSafresh1__UNDEFINED__ isUPPER_L1(c) ( isUPPER(c) \ 688de8cc8edSafresh1 || (FITS_IN_8_BITS(c) \ 689de8cc8edSafresh1 && ( NATIVE_TO_LATIN1((U8) c) >= 0xC0 \ 690de8cc8edSafresh1 && NATIVE_TO_LATIN1((U8) c) <= 0xDE \ 691de8cc8edSafresh1 && NATIVE_TO_LATIN1((U8) c) != 0xD7))) 692f3efcd01Safresh1__UNDEFINED__ isWORDCHAR(c) (isALPHANUMERIC(c) || (c) == '_') 693de8cc8edSafresh1__UNDEFINED__ isWORDCHAR_L1(c) (isIDFIRST_L1(c) || isDIGIT(c)) 694de8cc8edSafresh1__UNDEFINED__ isWORDCHAR_LC(c) (isIDFIRST_LC(c) || isDIGIT_LC(c)) 695f3efcd01Safresh1__UNDEFINED__ isXDIGIT(c) ( isDIGIT(c) \ 6969a4edab6Sbluhm || inRANGE((c), 'a', 'f') \ 6979a4edab6Sbluhm || inRANGE((c), 'A', 'F')) 698de8cc8edSafresh1__UNDEFINED__ isXDIGIT_L1(c) isXDIGIT(c) 699de8cc8edSafresh1__UNDEFINED__ isXDIGIT_LC(c) isxdigit(c) 700f3efcd01Safresh1 701de8cc8edSafresh1__UNDEFINED__ isALNUM_A(c) isALNUM(c) 702de8cc8edSafresh1__UNDEFINED__ isALNUMC_A(c) isALNUMC(c) 703de8cc8edSafresh1__UNDEFINED__ isALPHA_A(c) isALPHA(c) 704de8cc8edSafresh1__UNDEFINED__ isALPHANUMERIC_A(c) isALPHANUMERIC(c) 705de8cc8edSafresh1__UNDEFINED__ isASCII_A(c) isASCII(c) 706de8cc8edSafresh1__UNDEFINED__ isBLANK_A(c) isBLANK(c) 707de8cc8edSafresh1__UNDEFINED__ isCNTRL_A(c) isCNTRL(c) 708de8cc8edSafresh1__UNDEFINED__ isDIGIT_A(c) isDIGIT(c) 709de8cc8edSafresh1__UNDEFINED__ isGRAPH_A(c) isGRAPH(c) 710de8cc8edSafresh1__UNDEFINED__ isIDCONT_A(c) isIDCONT(c) 711de8cc8edSafresh1__UNDEFINED__ isIDFIRST_A(c) isIDFIRST(c) 712de8cc8edSafresh1__UNDEFINED__ isLOWER_A(c) isLOWER(c) 713de8cc8edSafresh1__UNDEFINED__ isOCTAL_A(c) isOCTAL(c) 714de8cc8edSafresh1__UNDEFINED__ isPRINT_A(c) isPRINT(c) 715de8cc8edSafresh1__UNDEFINED__ isPSXSPC_A(c) isPSXSPC(c) 716de8cc8edSafresh1__UNDEFINED__ isPUNCT_A(c) isPUNCT(c) 717de8cc8edSafresh1__UNDEFINED__ isSPACE_A(c) isSPACE(c) 718de8cc8edSafresh1__UNDEFINED__ isUPPER_A(c) isUPPER(c) 719de8cc8edSafresh1__UNDEFINED__ isWORDCHAR_A(c) isWORDCHAR(c) 720de8cc8edSafresh1__UNDEFINED__ isXDIGIT_A(c) isXDIGIT(c) 721de8cc8edSafresh1 722de8cc8edSafresh1__UNDEFINED__ isASCII_utf8_safe(s,e) (((e) - (s)) <= 0 ? 0 : isASCII(*(s))) 723de8cc8edSafresh1__UNDEFINED__ isASCII_uvchr(c) (FITS_IN_8_BITS(c) ? isASCII_L1(c) : 0) 724de8cc8edSafresh1 725de8cc8edSafresh1#if { VERSION >= 5.006 } 726de8cc8edSafresh1# ifdef isALPHA_uni /* If one defined, all are; this is just an exemplar */ 727de8cc8edSafresh1# define D_PPP_is_ctype(upper, lower, c) \ 728de8cc8edSafresh1 (FITS_IN_8_BITS(c) \ 729de8cc8edSafresh1 ? is ## upper ## _L1(c) \ 730de8cc8edSafresh1 : is ## upper ## _uni((UV) (c))) /* _uni is old synonym */ 731de8cc8edSafresh1# else 732de8cc8edSafresh1# define D_PPP_is_ctype(upper, lower, c) \ 733de8cc8edSafresh1 (FITS_IN_8_BITS(c) \ 734de8cc8edSafresh1 ? is ## upper ## _L1(c) \ 735de8cc8edSafresh1 : is_uni_ ## lower((UV) (c))) /* is_uni_ is even older */ 736de8cc8edSafresh1# endif 737de8cc8edSafresh1 738de8cc8edSafresh1__UNDEFINED__ isALPHA_uvchr(c) D_PPP_is_ctype(ALPHA, alpha, c) 739de8cc8edSafresh1__UNDEFINED__ isALPHANUMERIC_uvchr(c) (isALPHA_uvchr(c) || isDIGIT_uvchr(c)) 740de8cc8edSafresh1# ifdef is_uni_blank 741de8cc8edSafresh1__UNDEFINED__ isBLANK_uvchr(c) D_PPP_is_ctype(BLANK, blank, c) 742de8cc8edSafresh1# else 743de8cc8edSafresh1__UNDEFINED__ isBLANK_uvchr(c) (FITS_IN_8_BITS(c) \ 744de8cc8edSafresh1 ? isBLANK_L1(c) \ 745de8cc8edSafresh1 : ( (UV) (c) == 0x1680 /* Unicode 3.0 */ \ 746de8cc8edSafresh1 || inRANGE((UV) (c), 0x2000, 0x200A) \ 747de8cc8edSafresh1 || (UV) (c) == 0x202F /* Unicode 3.0 */\ 748de8cc8edSafresh1 || (UV) (c) == 0x205F /* Unicode 3.2 */\ 749de8cc8edSafresh1 || (UV) (c) == 0x3000)) 750de8cc8edSafresh1# endif 751de8cc8edSafresh1__UNDEFINED__ isCNTRL_uvchr(c) D_PPP_is_ctype(CNTRL, cntrl, c) 752de8cc8edSafresh1__UNDEFINED__ isDIGIT_uvchr(c) D_PPP_is_ctype(DIGIT, digit, c) 753de8cc8edSafresh1__UNDEFINED__ isGRAPH_uvchr(c) D_PPP_is_ctype(GRAPH, graph, c) 754de8cc8edSafresh1__UNDEFINED__ isIDCONT_uvchr(c) isWORDCHAR_uvchr(c) 755de8cc8edSafresh1__UNDEFINED__ isIDFIRST_uvchr(c) D_PPP_is_ctype(IDFIRST, idfirst, c) 756de8cc8edSafresh1__UNDEFINED__ isLOWER_uvchr(c) D_PPP_is_ctype(LOWER, lower, c) 757de8cc8edSafresh1__UNDEFINED__ isPRINT_uvchr(c) D_PPP_is_ctype(PRINT, print, c) 758de8cc8edSafresh1__UNDEFINED__ isPSXSPC_uvchr(c) isSPACE_uvchr(c) 759de8cc8edSafresh1__UNDEFINED__ isPUNCT_uvchr(c) D_PPP_is_ctype(PUNCT, punct, c) 760de8cc8edSafresh1__UNDEFINED__ isSPACE_uvchr(c) D_PPP_is_ctype(SPACE, space, c) 761de8cc8edSafresh1__UNDEFINED__ isUPPER_uvchr(c) D_PPP_is_ctype(UPPER, upper, c) 762de8cc8edSafresh1__UNDEFINED__ isXDIGIT_uvchr(c) D_PPP_is_ctype(XDIGIT, xdigit, c) 763de8cc8edSafresh1__UNDEFINED__ isWORDCHAR_uvchr(c) (FITS_IN_8_BITS(c) \ 764de8cc8edSafresh1 ? isWORDCHAR_L1(c) : isALPHANUMERIC_uvchr(c)) 765de8cc8edSafresh1 766de8cc8edSafresh1__UNDEFINED__ isALPHA_utf8_safe(s,e) D_PPP_IS_GENERIC_UTF8_SAFE(s, e, ALPHA) 767de8cc8edSafresh1# ifdef isALPHANUMERIC_utf8 768de8cc8edSafresh1__UNDEFINED__ isALPHANUMERIC_utf8_safe(s,e) \ 769de8cc8edSafresh1 D_PPP_IS_GENERIC_UTF8_SAFE(s, e, ALPHANUMERIC) 770de8cc8edSafresh1# else 771de8cc8edSafresh1__UNDEFINED__ isALPHANUMERIC_utf8_safe(s,e) \ 772de8cc8edSafresh1 (isALPHA_utf8_safe(s,e) || isDIGIT_utf8_safe(s,e)) 773de8cc8edSafresh1# endif 774de8cc8edSafresh1 775de8cc8edSafresh1/* This was broken before 5.18, and just use this instead of worrying about 776de8cc8edSafresh1 * which releases the official works on */ 777de8cc8edSafresh1# if 'A' == 65 778de8cc8edSafresh1__UNDEFINED__ isBLANK_utf8_safe(s,e) \ 779de8cc8edSafresh1( ( LIKELY((e) > (s)) ) ? /* Machine generated */ \ 780de8cc8edSafresh1 ( ( 0x09 == ((const U8*)s)[0] || 0x20 == ((const U8*)s)[0] ) ? 1 \ 781de8cc8edSafresh1 : ( LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) ? \ 782de8cc8edSafresh1 ( ( 0xC2 == ((const U8*)s)[0] ) ? \ 783de8cc8edSafresh1 ( ( 0xA0 == ((const U8*)s)[1] ) ? 2 : 0 ) \ 784de8cc8edSafresh1 : ( 0xE1 == ((const U8*)s)[0] ) ? \ 785de8cc8edSafresh1 ( ( ( 0x9A == ((const U8*)s)[1] ) && ( 0x80 == ((const U8*)s)[2] ) ) ? 3 : 0 )\ 786de8cc8edSafresh1 : ( 0xE2 == ((const U8*)s)[0] ) ? \ 787de8cc8edSafresh1 ( ( 0x80 == ((const U8*)s)[1] ) ? \ 788de8cc8edSafresh1 ( ( inRANGE(((const U8*)s)[2], 0x80, 0x8A ) || 0xAF == ((const U8*)s)[2] ) ? 3 : 0 )\ 789de8cc8edSafresh1 : ( ( 0x81 == ((const U8*)s)[1] ) && ( 0x9F == ((const U8*)s)[2] ) ) ? 3 : 0 )\ 790de8cc8edSafresh1 : ( ( ( 0xE3 == ((const U8*)s)[0] ) && ( 0x80 == ((const U8*)s)[1] ) ) && ( 0x80 == ((const U8*)s)[2] ) ) ? 3 : 0 )\ 791de8cc8edSafresh1 : 0 ) \ 792de8cc8edSafresh1 : 0 ) 793de8cc8edSafresh1 794de8cc8edSafresh1# elif 'A' == 193 && '^' == 95 /* EBCDIC 1047 */ 795de8cc8edSafresh1 796de8cc8edSafresh1__UNDEFINED__ isBLANK_utf8_safe(s,e) \ 797de8cc8edSafresh1( ( LIKELY((e) > (s)) ) ? \ 798de8cc8edSafresh1 ( ( 0x05 == ((const U8*)s)[0] || 0x40 == ((const U8*)s)[0] ) ? 1 \ 799de8cc8edSafresh1 : ( LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) ? \ 800de8cc8edSafresh1 ( ( 0x80 == ((const U8*)s)[0] ) ? \ 801de8cc8edSafresh1 ( ( 0x41 == ((const U8*)s)[1] ) ? 2 : 0 ) \ 802de8cc8edSafresh1 : ( 0xBC == ((const U8*)s)[0] ) ? \ 803de8cc8edSafresh1 ( ( ( 0x63 == ((const U8*)s)[1] ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )\ 804de8cc8edSafresh1 : ( 0xCA == ((const U8*)s)[0] ) ? \ 805de8cc8edSafresh1 ( ( 0x41 == ((const U8*)s)[1] ) ? \ 806de8cc8edSafresh1 ( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || 0x51 == ((const U8*)s)[2] ) ? 3 : 0 )\ 807de8cc8edSafresh1 : ( 0x42 == ((const U8*)s)[1] ) ? \ 808de8cc8edSafresh1 ( ( 0x56 == ((const U8*)s)[2] ) ? 3 : 0 ) \ 809de8cc8edSafresh1 : ( ( 0x43 == ((const U8*)s)[1] ) && ( 0x73 == ((const U8*)s)[2] ) ) ? 3 : 0 )\ 810de8cc8edSafresh1 : ( ( ( 0xCE == ((const U8*)s)[0] ) && ( 0x41 == ((const U8*)s)[1] ) ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )\ 811de8cc8edSafresh1 : 0 ) \ 812de8cc8edSafresh1: 0 ) 813de8cc8edSafresh1 814de8cc8edSafresh1# elif 'A' == 193 && '^' == 176 /* EBCDIC 037 */ 815de8cc8edSafresh1 816de8cc8edSafresh1__UNDEFINED__ isBLANK_utf8_safe(s,e) \ 817de8cc8edSafresh1( ( LIKELY((e) > (s)) ) ? \ 818de8cc8edSafresh1 ( ( 0x05 == ((const U8*)s)[0] || 0x40 == ((const U8*)s)[0] ) ? 1 \ 819de8cc8edSafresh1 : ( LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) ? \ 820de8cc8edSafresh1 ( ( 0x78 == ((const U8*)s)[0] ) ? \ 821de8cc8edSafresh1 ( ( 0x41 == ((const U8*)s)[1] ) ? 2 : 0 ) \ 822de8cc8edSafresh1 : ( 0xBD == ((const U8*)s)[0] ) ? \ 823de8cc8edSafresh1 ( ( ( 0x62 == ((const U8*)s)[1] ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )\ 824de8cc8edSafresh1 : ( 0xCA == ((const U8*)s)[0] ) ? \ 825de8cc8edSafresh1 ( ( 0x41 == ((const U8*)s)[1] ) ? \ 826de8cc8edSafresh1 ( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || 0x51 == ((const U8*)s)[2] ) ? 3 : 0 )\ 827de8cc8edSafresh1 : ( 0x42 == ((const U8*)s)[1] ) ? \ 828de8cc8edSafresh1 ( ( 0x56 == ((const U8*)s)[2] ) ? 3 : 0 ) \ 829de8cc8edSafresh1 : ( ( 0x43 == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) ? 3 : 0 )\ 830de8cc8edSafresh1 : ( ( ( 0xCE == ((const U8*)s)[0] ) && ( 0x41 == ((const U8*)s)[1] ) ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )\ 831de8cc8edSafresh1 : 0 ) \ 832de8cc8edSafresh1: 0 ) 833de8cc8edSafresh1 834de8cc8edSafresh1# else 835de8cc8edSafresh1# error Unknown character set 836de8cc8edSafresh1# endif 837de8cc8edSafresh1 838de8cc8edSafresh1__UNDEFINED__ isCNTRL_utf8_safe(s,e) D_PPP_IS_GENERIC_UTF8_SAFE(s, e, CNTRL) 839de8cc8edSafresh1__UNDEFINED__ isDIGIT_utf8_safe(s,e) D_PPP_IS_GENERIC_UTF8_SAFE(s, e, DIGIT) 840de8cc8edSafresh1__UNDEFINED__ isGRAPH_utf8_safe(s,e) D_PPP_IS_GENERIC_UTF8_SAFE(s, e, GRAPH) 841de8cc8edSafresh1# ifdef isIDCONT_utf8 842de8cc8edSafresh1__UNDEFINED__ isIDCONT_utf8_safe(s,e) D_PPP_IS_GENERIC_UTF8_SAFE(s, e, IDCONT) 843de8cc8edSafresh1# else 844de8cc8edSafresh1__UNDEFINED__ isIDCONT_utf8_safe(s,e) isWORDCHAR_utf8_safe(s,e) 845de8cc8edSafresh1# endif 846de8cc8edSafresh1 847de8cc8edSafresh1__UNDEFINED__ isIDFIRST_utf8_safe(s,e) D_PPP_IS_GENERIC_UTF8_SAFE(s, e, IDFIRST) 848de8cc8edSafresh1__UNDEFINED__ isLOWER_utf8_safe(s,e) D_PPP_IS_GENERIC_UTF8_SAFE(s, e, LOWER) 849de8cc8edSafresh1__UNDEFINED__ isPRINT_utf8_safe(s,e) D_PPP_IS_GENERIC_UTF8_SAFE(s, e, PRINT) 850de8cc8edSafresh1 851*3d61058aSafresh1/* Use the modern definition */ 852*3d61058aSafresh1__REDEFINE__ isPSXSPC_utf8_safe(s,e) isSPACE_utf8_safe(s,e) 853de8cc8edSafresh1 854de8cc8edSafresh1__UNDEFINED__ isPUNCT_utf8_safe(s,e) D_PPP_IS_GENERIC_UTF8_SAFE(s, e, PUNCT) 855de8cc8edSafresh1__UNDEFINED__ isSPACE_utf8_safe(s,e) D_PPP_IS_GENERIC_UTF8_SAFE(s, e, SPACE) 856de8cc8edSafresh1__UNDEFINED__ isUPPER_utf8_safe(s,e) D_PPP_IS_GENERIC_UTF8_SAFE(s, e, UPPER) 857de8cc8edSafresh1 858de8cc8edSafresh1# ifdef isWORDCHAR_utf8 859de8cc8edSafresh1__UNDEFINED__ isWORDCHAR_utf8_safe(s,e) D_PPP_IS_GENERIC_UTF8_SAFE(s, e, WORDCHAR) 860de8cc8edSafresh1# else 861de8cc8edSafresh1__UNDEFINED__ isWORDCHAR_utf8_safe(s,e) \ 862de8cc8edSafresh1 (isALPHANUMERIC_utf8_safe(s,e) || (*(s)) == '_') 863de8cc8edSafresh1# endif 864de8cc8edSafresh1 865de8cc8edSafresh1/* This was broken before 5.12, and just use this instead of worrying about 866de8cc8edSafresh1 * which releases the official works on */ 867de8cc8edSafresh1# if 'A' == 65 868de8cc8edSafresh1__UNDEFINED__ isXDIGIT_utf8_safe(s,e) \ 869de8cc8edSafresh1( ( LIKELY((e) > (s)) ) ? \ 870de8cc8edSafresh1 ( ( inRANGE(((const U8*)s)[0], 0x30, 0x39 ) || inRANGE(((const U8*)s)[0], 0x41, 0x46 ) || inRANGE(((const U8*)s)[0], 0x61, 0x66 ) ) ? 1\ 871de8cc8edSafresh1 : ( ( LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) && ( 0xEF == ((const U8*)s)[0] ) ) ? ( ( 0xBC == ((const U8*)s)[1] ) ?\ 872de8cc8edSafresh1 ( ( inRANGE(((const U8*)s)[2], 0x90, 0x99 ) || inRANGE(((const U8*)s)[2], 0xA1, 0xA6 ) ) ? 3 : 0 )\ 873de8cc8edSafresh1 : ( ( 0xBD == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x81, 0x86 ) ) ) ? 3 : 0 ) : 0 )\ 874de8cc8edSafresh1: 0 ) 875de8cc8edSafresh1 876de8cc8edSafresh1# elif 'A' == 193 && '^' == 95 /* EBCDIC 1047 */ 877de8cc8edSafresh1 878de8cc8edSafresh1__UNDEFINED__ isXDIGIT_utf8_safe(s,e) \ 879de8cc8edSafresh1( ( LIKELY((e) > (s)) ) ? \ 880de8cc8edSafresh1 ( ( inRANGE(((const U8*)s)[0], 0x81, 0x86 ) || inRANGE(((const U8*)s)[0], 0xC1, 0xC6 ) || inRANGE(((const U8*)s)[0], 0xF0, 0xF9 ) ) ? 1\ 881de8cc8edSafresh1 : ( ( ( LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) && ( 0xDD == ((const U8*)s)[0] ) ) && ( 0x73 == ((const U8*)s)[1] ) ) ? ( ( 0x67 == ((const U8*)s)[2] ) ?\ 882de8cc8edSafresh1 ( ( inRANGE(((const U8*)s)[3], 0x57, 0x59 ) || inRANGE(((const U8*)s)[3], 0x62, 0x68 ) ) ? 4 : 0 )\ 883de8cc8edSafresh1 : ( ( inRANGE(((const U8*)s)[2], 0x68, 0x69 ) ) && ( inRANGE(((const U8*)s)[3], 0x42, 0x47 ) ) ) ? 4 : 0 ) : 0 )\ 884de8cc8edSafresh1: 0 ) 885de8cc8edSafresh1 886de8cc8edSafresh1# elif 'A' == 193 && '^' == 176 /* EBCDIC 037 */ 887de8cc8edSafresh1 888de8cc8edSafresh1__UNDEFINED__ isXDIGIT_utf8_safe(s,e) \ 889de8cc8edSafresh1( ( LIKELY((e) > (s)) ) ? \ 890de8cc8edSafresh1 ( ( inRANGE(((const U8*)s)[0], 0x81, 0x86 ) || inRANGE(((const U8*)s)[0], 0xC1, 0xC6 ) || inRANGE(((const U8*)s)[0], 0xF0, 0xF9 ) ) ? 1\ 891de8cc8edSafresh1 : ( ( ( LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) && ( 0xDD == ((const U8*)s)[0] ) ) && ( 0x72 == ((const U8*)s)[1] ) ) ? ( ( 0x66 == ((const U8*)s)[2] ) ?\ 892de8cc8edSafresh1 ( ( inRANGE(((const U8*)s)[3], 0x57, 0x59 ) || 0x5F == ((const U8*)s)[3] || inRANGE(((const U8*)s)[3], 0x62, 0x67 ) ) ? 4 : 0 )\ 893de8cc8edSafresh1 : ( ( inRANGE(((const U8*)s)[2], 0x67, 0x68 ) ) && ( inRANGE(((const U8*)s)[3], 0x42, 0x47 ) ) ) ? 4 : 0 ) : 0 )\ 894de8cc8edSafresh1: 0 ) 895de8cc8edSafresh1 896de8cc8edSafresh1# else 897de8cc8edSafresh1# error Unknown character set 898de8cc8edSafresh1# endif 899de8cc8edSafresh1 900de8cc8edSafresh1__UNDEFINED__ isALPHA_LC_utf8_safe(s,e) D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, ALPHA) 901de8cc8edSafresh1# ifdef isALPHANUMERIC_utf8 902de8cc8edSafresh1__UNDEFINED__ isALPHANUMERIC_LC_utf8_safe(s,e) \ 903de8cc8edSafresh1 D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, ALPHANUMERIC) 904de8cc8edSafresh1# else 905de8cc8edSafresh1__UNDEFINED__ isALPHANUMERIC_LC_utf8_safe(s,e) \ 906de8cc8edSafresh1 (isALPHA_LC_utf8_safe(s,e) || isDIGIT_LC_utf8_safe(s,e)) 907de8cc8edSafresh1# endif 908de8cc8edSafresh1 909de8cc8edSafresh1__UNDEFINED__ isBLANK_LC_utf8_safe(s,e) \ 910de8cc8edSafresh1 D_PPP_IS_GENERIC_LC_UTF8_SAFE_BROKEN(s, e, BLANK) 911de8cc8edSafresh1__UNDEFINED__ isCNTRL_LC_utf8_safe(s,e) D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, CNTRL) 912de8cc8edSafresh1__UNDEFINED__ isDIGIT_LC_utf8_safe(s,e) D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, DIGIT) 913de8cc8edSafresh1__UNDEFINED__ isGRAPH_LC_utf8_safe(s,e) D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, GRAPH) 914de8cc8edSafresh1# ifdef isIDCONT_utf8 915de8cc8edSafresh1__UNDEFINED__ isIDCONT_LC_utf8_safe(s,e) D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, IDCONT) 916de8cc8edSafresh1# else 917de8cc8edSafresh1__UNDEFINED__ isIDCONT_LC_utf8_safe(s,e) isWORDCHAR_LC_utf8_safe(s,e) 918de8cc8edSafresh1# endif 919de8cc8edSafresh1 920de8cc8edSafresh1__UNDEFINED__ isIDFIRST_LC_utf8_safe(s,e) D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, IDFIRST) 921de8cc8edSafresh1__UNDEFINED__ isLOWER_LC_utf8_safe(s,e) D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, LOWER) 922de8cc8edSafresh1__UNDEFINED__ isPRINT_LC_utf8_safe(s,e) D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, PRINT) 923de8cc8edSafresh1 924*3d61058aSafresh1/* Use the modern definition */ 925*3d61058aSafresh1__REDEFINE__ isPSXSPC_LC_utf8_safe(s,e) isSPACE_LC_utf8_safe(s,e) 926de8cc8edSafresh1 927de8cc8edSafresh1__UNDEFINED__ isPUNCT_LC_utf8_safe(s,e) D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, PUNCT) 928de8cc8edSafresh1__UNDEFINED__ isSPACE_LC_utf8_safe(s,e) D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, SPACE) 929de8cc8edSafresh1__UNDEFINED__ isUPPER_LC_utf8_safe(s,e) D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, UPPER) 930de8cc8edSafresh1 931de8cc8edSafresh1# ifdef isWORDCHAR_utf8 932de8cc8edSafresh1__UNDEFINED__ isWORDCHAR_LC_utf8_safe(s,e) D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, WORDCHAR) 933de8cc8edSafresh1# else 934de8cc8edSafresh1__UNDEFINED__ isWORDCHAR_LC_utf8_safe(s,e) \ 935de8cc8edSafresh1 (isALPHANUMERIC_LC_utf8_safe(s,e) || (*(s)) == '_') 936de8cc8edSafresh1# endif 937de8cc8edSafresh1 938de8cc8edSafresh1__UNDEFINED__ isXDIGIT_LC_utf8_safe(s,e) \ 939de8cc8edSafresh1 D_PPP_IS_GENERIC_LC_UTF8_SAFE_BROKEN(s, e, XDIGIT) 940de8cc8edSafresh1 941de8cc8edSafresh1/* Warning: isALPHANUMERIC_utf8_safe, isALPHA_utf8_safe, isASCII_utf8_safe, 942de8cc8edSafresh1 * isBLANK_utf8_safe, isCNTRL_utf8_safe, isDIGIT_utf8_safe, isGRAPH_utf8_safe, 943de8cc8edSafresh1 * isIDCONT_utf8_safe, isIDFIRST_utf8_safe, isLOWER_utf8_safe, 944de8cc8edSafresh1 * isPRINT_utf8_safe, isPSXSPC_utf8_safe, isPUNCT_utf8_safe, isSPACE_utf8_safe, 945de8cc8edSafresh1 * isUPPER_utf8_safe, isWORDCHAR_utf8_safe, isWORDCHAR_utf8_safe, 946de8cc8edSafresh1 * isXDIGIT_utf8_safe, 947de8cc8edSafresh1 * isALPHANUMERIC_LC_utf8_safe, isALPHA_LC_utf8_safe, isASCII_LC_utf8_safe, 948de8cc8edSafresh1 * isBLANK_LC_utf8_safe, isCNTRL_LC_utf8_safe, isDIGIT_LC_utf8_safe, 949de8cc8edSafresh1 * isGRAPH_LC_utf8_safe, isIDCONT_LC_utf8_safe, isIDFIRST_LC_utf8_safe, 950de8cc8edSafresh1 * isLOWER_LC_utf8_safe, isPRINT_LC_utf8_safe, isPSXSPC_LC_utf8_safe, 951de8cc8edSafresh1 * isPUNCT_LC_utf8_safe, isSPACE_LC_utf8_safe, isUPPER_LC_utf8_safe, 952de8cc8edSafresh1 * isWORDCHAR_LC_utf8_safe, isWORDCHAR_LC_utf8_safe, isXDIGIT_LC_utf8_safe, 953de8cc8edSafresh1 * isALPHANUMERIC_uvchr, isALPHA_uvchr, isASCII_uvchr, isBLANK_uvchr, 954de8cc8edSafresh1 * isCNTRL_uvchr, isDIGIT_uvchr, isGRAPH_uvchr, isIDCONT_uvchr, 955de8cc8edSafresh1 * isIDFIRST_uvchr, isLOWER_uvchr, isPRINT_uvchr, isPSXSPC_uvchr, 956de8cc8edSafresh1 * isPUNCT_uvchr, isSPACE_uvchr, isUPPER_uvchr, isWORDCHAR_uvchr, 957de8cc8edSafresh1 * isWORDCHAR_uvchr, isXDIGIT_uvchr 958de8cc8edSafresh1 * 959de8cc8edSafresh1 * The UTF-8 handling is buggy in early Perls, and this can give inaccurate 960de8cc8edSafresh1 * results for code points above 0xFF, until the implementation started 961de8cc8edSafresh1 * settling down in 5.12 and 5.14 */ 962de8cc8edSafresh1 963de8cc8edSafresh1#endif 964de8cc8edSafresh1 965de8cc8edSafresh1#define D_PPP_TOO_SHORT_MSG "Malformed UTF-8 character starting with:" \ 966de8cc8edSafresh1 " \\x%02x (too short; %d bytes available, need" \ 967de8cc8edSafresh1 " %d)\n" 968de8cc8edSafresh1/* Perls starting here had a new API which handled multi-character results */ 969de8cc8edSafresh1#if { VERSION >= 5.7.3 } 970de8cc8edSafresh1 971de8cc8edSafresh1__UNDEFINED__ toLOWER_uvchr(c, s, l) UNI_TO_NATIVE(to_uni_lower(NATIVE_TO_UNI(c), s, l)) 972de8cc8edSafresh1__UNDEFINED__ toUPPER_uvchr(c, s, l) UNI_TO_NATIVE(to_uni_upper(NATIVE_TO_UNI(c), s, l)) 973de8cc8edSafresh1__UNDEFINED__ toTITLE_uvchr(c, s, l) UNI_TO_NATIVE(to_uni_title(NATIVE_TO_UNI(c), s, l)) 974de8cc8edSafresh1__UNDEFINED__ toFOLD_uvchr(c, s, l) UNI_TO_NATIVE(to_uni_fold( NATIVE_TO_UNI(c), s, l)) 975de8cc8edSafresh1 976de8cc8edSafresh1# if { VERSION != 5.15.6 } /* Just this version is broken */ 977de8cc8edSafresh1 978de8cc8edSafresh1 /* Prefer the macro to the function */ 979de8cc8edSafresh1# if defined toLOWER_utf8 980de8cc8edSafresh1# define D_PPP_TO_LOWER_CALLEE(s,r,l) toLOWER_utf8(s,r,l) 981de8cc8edSafresh1# else 982de8cc8edSafresh1# define D_PPP_TO_LOWER_CALLEE(s,r,l) to_utf8_lower(s,r,l) 983de8cc8edSafresh1# endif 984de8cc8edSafresh1# if defined toTITLE_utf8 985de8cc8edSafresh1# define D_PPP_TO_TITLE_CALLEE(s,r,l) toTITLE_utf8(s,r,l) 986de8cc8edSafresh1# else 987de8cc8edSafresh1# define D_PPP_TO_TITLE_CALLEE(s,r,l) to_utf8_title(s,r,l) 988de8cc8edSafresh1# endif 989de8cc8edSafresh1# if defined toUPPER_utf8 990de8cc8edSafresh1# define D_PPP_TO_UPPER_CALLEE(s,r,l) toUPPER_utf8(s,r,l) 991de8cc8edSafresh1# else 992de8cc8edSafresh1# define D_PPP_TO_UPPER_CALLEE(s,r,l) to_utf8_upper(s,r,l) 993de8cc8edSafresh1# endif 994de8cc8edSafresh1# if defined toFOLD_utf8 995de8cc8edSafresh1# define D_PPP_TO_FOLD_CALLEE(s,r,l) toFOLD_utf8(s,r,l) 996de8cc8edSafresh1# else 997de8cc8edSafresh1# define D_PPP_TO_FOLD_CALLEE(s,r,l) to_utf8_fold(s,r,l) 998de8cc8edSafresh1# endif 999de8cc8edSafresh1# else /* Below is 5.15.6, which failed to make the macros available 1000de8cc8edSafresh1# outside of core, so we have to use the 'Perl_' form. khw 1001de8cc8edSafresh1# decided it was easier to just handle this case than have to 1002de8cc8edSafresh1# document the exception, and make an exception in the tests below 1003de8cc8edSafresh1# */ 1004de8cc8edSafresh1# define D_PPP_TO_LOWER_CALLEE(s,r,l) \ 1005de8cc8edSafresh1 Perl__to_utf8_lower_flags(aTHX_ s, r, l, 0, NULL) 1006de8cc8edSafresh1# define D_PPP_TO_TITLE_CALLEE(s,r,l) \ 1007de8cc8edSafresh1 Perl__to_utf8_title_flags(aTHX_ s, r, l, 0, NULL) 1008de8cc8edSafresh1# define D_PPP_TO_UPPER_CALLEE(s,r,l) \ 1009de8cc8edSafresh1 Perl__to_utf8_upper_flags(aTHX_ s, r, l, 0, NULL) 1010de8cc8edSafresh1# define D_PPP_TO_FOLD_CALLEE(s,r,l) \ 1011de8cc8edSafresh1 Perl__to_utf8_fold_flags(aTHX_ s, r, l, FOLD_FLAGS_FULL, NULL) 1012de8cc8edSafresh1# endif 1013de8cc8edSafresh1 1014de8cc8edSafresh1/* The actual implementation of the backported macros. If too short, croak, 1015de8cc8edSafresh1 * otherwise call the original that doesn't have an upper limit parameter */ 1016de8cc8edSafresh1# define D_PPP_GENERIC_MULTI_ARG_TO(name, s, e,r,l) \ 1017de8cc8edSafresh1 (((((e) - (s)) <= 0) \ 1018de8cc8edSafresh1 /* We could just do nothing, but modern perls croak */ \ 1019de8cc8edSafresh1 ? (croak("Attempting case change on zero length string"), \ 1020de8cc8edSafresh1 0) /* So looks like it returns something, and will compile */ \ 1021de8cc8edSafresh1 : ((e) - (s)) < UTF8SKIP(s)) \ 1022de8cc8edSafresh1 ? (croak(D_PPP_TOO_SHORT_MSG, \ 1023de8cc8edSafresh1 s[0], (int) ((e) - (s)), (int) UTF8SKIP(s)), \ 1024de8cc8edSafresh1 0) \ 1025de8cc8edSafresh1 : D_PPP_TO_ ## name ## _CALLEE(s,r,l)) 1026de8cc8edSafresh1 1027de8cc8edSafresh1__UNDEFINED__ toUPPER_utf8_safe(s,e,r,l) \ 1028de8cc8edSafresh1 D_PPP_GENERIC_MULTI_ARG_TO(UPPER,s,e,r,l) 1029de8cc8edSafresh1__UNDEFINED__ toLOWER_utf8_safe(s,e,r,l) \ 1030de8cc8edSafresh1 D_PPP_GENERIC_MULTI_ARG_TO(LOWER,s,e,r,l) 1031de8cc8edSafresh1__UNDEFINED__ toTITLE_utf8_safe(s,e,r,l) \ 1032de8cc8edSafresh1 D_PPP_GENERIC_MULTI_ARG_TO(TITLE,s,e,r,l) 1033de8cc8edSafresh1__UNDEFINED__ toFOLD_utf8_safe(s,e,r,l) \ 1034de8cc8edSafresh1 D_PPP_GENERIC_MULTI_ARG_TO(FOLD,s,e,r,l) 1035de8cc8edSafresh1 1036de8cc8edSafresh1#elif { VERSION >= 5.006 } 1037de8cc8edSafresh1 1038de8cc8edSafresh1/* Here we have UTF-8 support, but using the original API where the case 1039de8cc8edSafresh1 * changing functions merely returned the changed code point; hence they 1040de8cc8edSafresh1 * couldn't handle multi-character results. */ 1041de8cc8edSafresh1 1042de8cc8edSafresh1# ifdef uvchr_to_utf8 1043de8cc8edSafresh1# define D_PPP_UV_TO_UTF8 uvchr_to_utf8 1044de8cc8edSafresh1# else 1045de8cc8edSafresh1# define D_PPP_UV_TO_UTF8 uv_to_utf8 1046de8cc8edSafresh1# endif 1047de8cc8edSafresh1 1048de8cc8edSafresh1 /* Get the utf8 of the case changed value, and store its length; then have 1049de8cc8edSafresh1 * to re-calculate the changed case value in order to return it */ 1050de8cc8edSafresh1# define D_PPP_GENERIC_SINGLE_ARG_TO_UVCHR(name, c, s, l) \ 1051de8cc8edSafresh1 (*(l) = (D_PPP_UV_TO_UTF8(s, \ 1052de8cc8edSafresh1 UNI_TO_NATIVE(to_uni_ ## name(NATIVE_TO_UNI(c)))) - (s)), \ 1053de8cc8edSafresh1 UNI_TO_NATIVE(to_uni_ ## name(NATIVE_TO_UNI(c)))) 1054de8cc8edSafresh1 1055de8cc8edSafresh1__UNDEFINED__ toLOWER_uvchr(c, s, l) \ 1056de8cc8edSafresh1 D_PPP_GENERIC_SINGLE_ARG_TO_UVCHR(lower, c, s, l) 1057de8cc8edSafresh1__UNDEFINED__ toUPPER_uvchr(c, s, l) \ 1058de8cc8edSafresh1 D_PPP_GENERIC_SINGLE_ARG_TO_UVCHR(upper, c, s, l) 1059de8cc8edSafresh1__UNDEFINED__ toTITLE_uvchr(c, s, l) \ 1060de8cc8edSafresh1 D_PPP_GENERIC_SINGLE_ARG_TO_UVCHR(title, c, s, l) 1061de8cc8edSafresh1__UNDEFINED__ toFOLD_uvchr(c, s, l) toLOWER_uvchr(c, s, l) 1062de8cc8edSafresh1 1063de8cc8edSafresh1# define D_PPP_GENERIC_SINGLE_ARG_TO_UTF8(name, s, e, r, l) \ 1064de8cc8edSafresh1 (((((e) - (s)) <= 0) \ 1065de8cc8edSafresh1 ? (croak("Attempting case change on zero length string"), \ 1066de8cc8edSafresh1 0) /* So looks like it returns something, and will compile */ \ 1067de8cc8edSafresh1 : ((e) - (s)) < UTF8SKIP(s)) \ 1068de8cc8edSafresh1 ? (croak(D_PPP_TOO_SHORT_MSG, \ 1069de8cc8edSafresh1 s[0], (int) ((e) - (s)), (int) UTF8SKIP(s)), \ 1070de8cc8edSafresh1 0) \ 1071de8cc8edSafresh1 /* Get the changed code point and store its UTF-8 */ \ 1072de8cc8edSafresh1 : D_PPP_UV_TO_UTF8(r, to_utf8_ ## name(s)), \ 1073de8cc8edSafresh1 /* Then store its length, and re-get code point for return */ \ 1074de8cc8edSafresh1 *(l) = UTF8SKIP(r), to_utf8_ ## name(r)) 1075de8cc8edSafresh1 1076de8cc8edSafresh1/* Warning: toUPPER_utf8_safe, toLOWER_utf8_safe, toTITLE_utf8_safe, 1077de8cc8edSafresh1 * toUPPER_uvchr, toLOWER_uvchr, toTITLE_uvchr 1078de8cc8edSafresh1 The UTF-8 case changing operations had bugs before around 5.12 or 5.14; 1079de8cc8edSafresh1 this backport does not correct them. 1080de8cc8edSafresh1 1081de8cc8edSafresh1 In perls before 7.3, multi-character case changing is not implemented; this 1082de8cc8edSafresh1 backport uses the simple case changes available in those perls. */ 1083de8cc8edSafresh1 1084de8cc8edSafresh1__UNDEFINED__ toUPPER_utf8_safe(s,e,r,l) \ 1085de8cc8edSafresh1 D_PPP_GENERIC_SINGLE_ARG_TO_UTF8(upper, s, e, r, l) 1086de8cc8edSafresh1__UNDEFINED__ toLOWER_utf8_safe(s,e,r,l) \ 1087de8cc8edSafresh1 D_PPP_GENERIC_SINGLE_ARG_TO_UTF8(lower, s, e, r, l) 1088de8cc8edSafresh1__UNDEFINED__ toTITLE_utf8_safe(s,e,r,l) \ 1089de8cc8edSafresh1 D_PPP_GENERIC_SINGLE_ARG_TO_UTF8(title, s, e, r, l) 1090de8cc8edSafresh1 1091de8cc8edSafresh1 /* Warning: toFOLD_utf8_safe, toFOLD_uvchr 1092de8cc8edSafresh1 The UTF-8 case changing operations had bugs before around 5.12 or 5.14; 1093de8cc8edSafresh1 this backport does not correct them. 1094de8cc8edSafresh1 1095de8cc8edSafresh1 In perls before 7.3, case folding is not implemented; instead, this 1096de8cc8edSafresh1 backport substitutes simple (not multi-character, which isn't available) 1097de8cc8edSafresh1 lowercasing. This gives the correct result in most, but not all, instances 1098de8cc8edSafresh1 */ 1099de8cc8edSafresh1 1100de8cc8edSafresh1__UNDEFINED__ toFOLD_utf8_safe(s,e,r,l) toLOWER_utf8_safe(s,e,r,l) 1101de8cc8edSafresh1 1102de8cc8edSafresh1#endif 11035759b3d2Safresh1 11045759b3d2Safresh1/* Until we figure out how to support this in older perls... */ 11055759b3d2Safresh1#if { VERSION >= 5.8.0 } 11065759b3d2Safresh1 11075759b3d2Safresh1__UNDEFINED__ HeUTF8(he) ((HeKLEN(he) == HEf_SVKEY) ? \ 11085759b3d2Safresh1 SvUTF8(HeKEY_sv(he)) : \ 11095759b3d2Safresh1 (U32)HeKUTF8(he)) 11105759b3d2Safresh1 11115759b3d2Safresh1#endif 11125759b3d2Safresh1 11135759b3d2Safresh1__UNDEFINED__ C_ARRAY_LENGTH(a) (sizeof(a)/sizeof((a)[0])) 11145759b3d2Safresh1__UNDEFINED__ C_ARRAY_END(a) ((a) + C_ARRAY_LENGTH(a)) 11155759b3d2Safresh1 1116f3efcd01Safresh1__UNDEFINED__ LIKELY(x) (x) 1117f3efcd01Safresh1__UNDEFINED__ UNLIKELY(x) (x) 1118f3efcd01Safresh1 1119f3efcd01Safresh1#ifndef MUTABLE_PTR 11209a4edab6Sbluhm#if defined(PERL_USE_GCC_BRACE_GROUPS) 1121f3efcd01Safresh1# define MUTABLE_PTR(p) ({ void *_p = (p); _p; }) 1122f3efcd01Safresh1#else 1123f3efcd01Safresh1# define MUTABLE_PTR(p) ((void *) (p)) 1124f3efcd01Safresh1#endif 1125f3efcd01Safresh1#endif 1126f3efcd01Safresh1 11279a4edab6Sbluhm__UNDEFINED__ MUTABLE_AV(p) ((AV *)MUTABLE_PTR(p)) 11289a4edab6Sbluhm__UNDEFINED__ MUTABLE_CV(p) ((CV *)MUTABLE_PTR(p)) 11299a4edab6Sbluhm__UNDEFINED__ MUTABLE_GV(p) ((GV *)MUTABLE_PTR(p)) 11309a4edab6Sbluhm__UNDEFINED__ MUTABLE_HV(p) ((HV *)MUTABLE_PTR(p)) 11319a4edab6Sbluhm__UNDEFINED__ MUTABLE_IO(p) ((IO *)MUTABLE_PTR(p)) 1132f3efcd01Safresh1__UNDEFINED__ MUTABLE_SV(p) ((SV *)MUTABLE_PTR(p)) 1133f3efcd01Safresh1 11345759b3d2Safresh1=xsmisc 11355759b3d2Safresh1 11365759b3d2Safresh1typedef XSPROTO(XSPROTO_test_t); 11375759b3d2Safresh1typedef XSPROTO_test_t *XSPROTO_test_t_ptr; 11385759b3d2Safresh1 11395759b3d2Safresh1XS(XS_Devel__PPPort_dXSTARG); /* prototype */ 11405759b3d2Safresh1XS(XS_Devel__PPPort_dXSTARG) 11415759b3d2Safresh1{ 11425759b3d2Safresh1 dXSARGS; 11435759b3d2Safresh1 dXSTARG; 11445759b3d2Safresh1 IV iv; 11455759b3d2Safresh1 11465759b3d2Safresh1 PERL_UNUSED_VAR(cv); 11475759b3d2Safresh1 SP -= items; 11485759b3d2Safresh1 iv = SvIV(ST(0)) + 1; 11495759b3d2Safresh1 PUSHi(iv); 11505759b3d2Safresh1 XSRETURN(1); 11515759b3d2Safresh1} 11525759b3d2Safresh1 11535759b3d2Safresh1XS(XS_Devel__PPPort_dAXMARK); /* prototype */ 11545759b3d2Safresh1XS(XS_Devel__PPPort_dAXMARK) 11555759b3d2Safresh1{ 11565759b3d2Safresh1 dSP; 11575759b3d2Safresh1 dAXMARK; 11585759b3d2Safresh1 dITEMS; 11595759b3d2Safresh1 IV iv; 11605759b3d2Safresh1 11615759b3d2Safresh1 PERL_UNUSED_VAR(cv); 11625759b3d2Safresh1 SP -= items; 11635759b3d2Safresh1 iv = SvIV(ST(0)) - 1; 11645759b3d2Safresh1 mPUSHi(iv); 11655759b3d2Safresh1 XSRETURN(1); 11665759b3d2Safresh1} 11675759b3d2Safresh1 11685759b3d2Safresh1=xsboot 11695759b3d2Safresh1 11705759b3d2Safresh1{ 11715759b3d2Safresh1 XSPROTO_test_t_ptr p = &XS_Devel__PPPort_dXSTARG; 11725759b3d2Safresh1 newXS("Devel::PPPort::dXSTARG", *p, file); 11735759b3d2Safresh1} 11745759b3d2Safresh1newXS("Devel::PPPort::dAXMARK", XS_Devel__PPPort_dAXMARK, file); 11755759b3d2Safresh1 11765759b3d2Safresh1=xsubs 11775759b3d2Safresh1 11785759b3d2Safresh1int 11795759b3d2Safresh1OpSIBLING_tests() 11805759b3d2Safresh1 PREINIT: 1181e0680481Safresh1 OP *x = NULL; 1182e0680481Safresh1 OP *kid = NULL; 1183e0680481Safresh1 OP *middlekid = NULL; 1184e0680481Safresh1 OP *lastkid = NULL; 11855759b3d2Safresh1 int count = 0; 11865759b3d2Safresh1 int failures = 0; 11875759b3d2Safresh1 int i; 11885759b3d2Safresh1 CODE: 11895759b3d2Safresh1 x = newOP(OP_PUSHMARK, 0); 11905759b3d2Safresh1 11915759b3d2Safresh1 /* No siblings yet! */ 11925759b3d2Safresh1 if (OpHAS_SIBLING(x) || OpSIBLING(x)) { 11935759b3d2Safresh1 failures++; warn("Op should not have had a sib"); 11945759b3d2Safresh1 } 11955759b3d2Safresh1 11965759b3d2Safresh1 11975759b3d2Safresh1 /* Add 2 siblings */ 11985759b3d2Safresh1 kid = x; 11995759b3d2Safresh1 12005759b3d2Safresh1 for (i = 0; i < 2; i++) { 12015759b3d2Safresh1 OP *newsib = newOP(OP_PUSHMARK, 0); 12025759b3d2Safresh1 OpMORESIB_set(kid, newsib); 12035759b3d2Safresh1 12045759b3d2Safresh1 kid = OpSIBLING(kid); 12055759b3d2Safresh1 lastkid = kid; 12065759b3d2Safresh1 } 1207f3efcd01Safresh1 middlekid = OpSIBLING(x); 12085759b3d2Safresh1 12095759b3d2Safresh1 /* Should now have a sibling */ 12105759b3d2Safresh1 if (! OpHAS_SIBLING(x) || ! OpSIBLING(x) ) { 12115759b3d2Safresh1 failures++; warn("Op should have had a sib after moresib_set"); 12125759b3d2Safresh1 } 12135759b3d2Safresh1 12145759b3d2Safresh1 /* Count the siblings */ 12155759b3d2Safresh1 for (kid = OpSIBLING(x); kid; kid = OpSIBLING(kid)) { 12165759b3d2Safresh1 count++; 12175759b3d2Safresh1 } 12185759b3d2Safresh1 12195759b3d2Safresh1 if (count != 2) { 12205759b3d2Safresh1 failures++; warn("Kid had %d sibs, expected 2", count); 12215759b3d2Safresh1 } 12225759b3d2Safresh1 12235759b3d2Safresh1 if (OpHAS_SIBLING(lastkid) || OpSIBLING(lastkid)) { 12245759b3d2Safresh1 failures++; warn("Last kid should not have a sib"); 12255759b3d2Safresh1 } 12265759b3d2Safresh1 12275759b3d2Safresh1 /* Really sets the parent, and says 'no more siblings' */ 12285759b3d2Safresh1 OpLASTSIB_set(x, lastkid); 12295759b3d2Safresh1 12305759b3d2Safresh1 if (OpHAS_SIBLING(x) || OpSIBLING(x)) { 12315759b3d2Safresh1 failures++; warn("OpLASTSIB_set failed?"); 12325759b3d2Safresh1 } 12335759b3d2Safresh1 12345759b3d2Safresh1 /* Restore the kid */ 12355759b3d2Safresh1 OpMORESIB_set(x, lastkid); 12365759b3d2Safresh1 12375759b3d2Safresh1 /* Try to remove it again */ 12385759b3d2Safresh1 OpLASTSIB_set(x, NULL); 12395759b3d2Safresh1 12405759b3d2Safresh1 if (OpHAS_SIBLING(x) || OpSIBLING(x)) { 12415759b3d2Safresh1 failures++; warn("OpLASTSIB_set with NULL failed?"); 12425759b3d2Safresh1 } 12435759b3d2Safresh1 12445759b3d2Safresh1 /* Try to restore with maybesib_set */ 12455759b3d2Safresh1 OpMAYBESIB_set(x, lastkid, NULL); 12465759b3d2Safresh1 12475759b3d2Safresh1 if (! OpHAS_SIBLING(x) || ! OpSIBLING(x) ) { 12485759b3d2Safresh1 failures++; warn("Op should have had a sib after maybesibset"); 12495759b3d2Safresh1 } 12505759b3d2Safresh1 1251f3efcd01Safresh1 op_free(lastkid); 1252f3efcd01Safresh1 op_free(middlekid); 1253f3efcd01Safresh1 op_free(x); 12545759b3d2Safresh1 RETVAL = failures; 12555759b3d2Safresh1 OUTPUT: 12565759b3d2Safresh1 RETVAL 12575759b3d2Safresh1 12585759b3d2Safresh1int 12595759b3d2Safresh1SvRXOK(sv) 12605759b3d2Safresh1 SV *sv 12615759b3d2Safresh1 CODE: 12625759b3d2Safresh1 RETVAL = SvRXOK(sv); 12635759b3d2Safresh1 OUTPUT: 12645759b3d2Safresh1 RETVAL 12655759b3d2Safresh1 12665759b3d2Safresh1int 12675759b3d2Safresh1ptrtests() 12685759b3d2Safresh1 PREINIT: 12695759b3d2Safresh1 int var, *p = &var; 12705759b3d2Safresh1 12715759b3d2Safresh1 CODE: 12725759b3d2Safresh1 RETVAL = 0; 12735759b3d2Safresh1 RETVAL += PTR2nat(p) != 0 ? 1 : 0; 12745759b3d2Safresh1 RETVAL += PTR2ul(p) != 0UL ? 2 : 0; 12755759b3d2Safresh1 RETVAL += PTR2UV(p) != (UV) 0 ? 4 : 0; 12765759b3d2Safresh1 RETVAL += PTR2IV(p) != (IV) 0 ? 8 : 0; 12775759b3d2Safresh1 RETVAL += PTR2NV(p) != (NV) 0 ? 16 : 0; 12785759b3d2Safresh1 RETVAL += p > NUM2PTR(int *, 0) ? 32 : 0; 12795759b3d2Safresh1 12805759b3d2Safresh1 OUTPUT: 12815759b3d2Safresh1 RETVAL 12825759b3d2Safresh1 12835759b3d2Safresh1int 12845759b3d2Safresh1gv_stashpvn(name, create) 12855759b3d2Safresh1 char *name 12865759b3d2Safresh1 I32 create 12875759b3d2Safresh1 CODE: 12885759b3d2Safresh1 RETVAL = gv_stashpvn(name, strlen(name), create) != NULL; 12895759b3d2Safresh1 OUTPUT: 12905759b3d2Safresh1 RETVAL 12915759b3d2Safresh1 12925759b3d2Safresh1int 12935759b3d2Safresh1get_sv(name, create) 12945759b3d2Safresh1 char *name 12955759b3d2Safresh1 I32 create 12965759b3d2Safresh1 CODE: 12975759b3d2Safresh1 RETVAL = get_sv(name, create) != NULL; 12985759b3d2Safresh1 OUTPUT: 12995759b3d2Safresh1 RETVAL 13005759b3d2Safresh1 13015759b3d2Safresh1int 13025759b3d2Safresh1get_av(name, create) 13035759b3d2Safresh1 char *name 13045759b3d2Safresh1 I32 create 13055759b3d2Safresh1 CODE: 13065759b3d2Safresh1 RETVAL = get_av(name, create) != NULL; 13075759b3d2Safresh1 OUTPUT: 13085759b3d2Safresh1 RETVAL 13095759b3d2Safresh1 13105759b3d2Safresh1int 13115759b3d2Safresh1get_hv(name, create) 13125759b3d2Safresh1 char *name 13135759b3d2Safresh1 I32 create 13145759b3d2Safresh1 CODE: 13155759b3d2Safresh1 RETVAL = get_hv(name, create) != NULL; 13165759b3d2Safresh1 OUTPUT: 13175759b3d2Safresh1 RETVAL 13185759b3d2Safresh1 13195759b3d2Safresh1int 13205759b3d2Safresh1get_cv(name, create) 13215759b3d2Safresh1 char *name 13225759b3d2Safresh1 I32 create 13235759b3d2Safresh1 CODE: 13245759b3d2Safresh1 RETVAL = get_cv(name, create) != NULL; 13255759b3d2Safresh1 OUTPUT: 13265759b3d2Safresh1 RETVAL 13275759b3d2Safresh1 13285759b3d2Safresh1void 13295759b3d2Safresh1xsreturn(two) 13305759b3d2Safresh1 int two 13315759b3d2Safresh1 PPCODE: 13325759b3d2Safresh1 mXPUSHp("test1", 5); 13335759b3d2Safresh1 if (two) 13345759b3d2Safresh1 mXPUSHp("test2", 5); 13355759b3d2Safresh1 if (two) 13365759b3d2Safresh1 XSRETURN(2); 13375759b3d2Safresh1 else 13385759b3d2Safresh1 XSRETURN(1); 13395759b3d2Safresh1 13405759b3d2Safresh1SV* 13415759b3d2Safresh1boolSV(value) 13425759b3d2Safresh1 int value 13435759b3d2Safresh1 CODE: 13445759b3d2Safresh1 RETVAL = newSVsv(boolSV(value)); 13455759b3d2Safresh1 OUTPUT: 13465759b3d2Safresh1 RETVAL 13475759b3d2Safresh1 13485759b3d2Safresh1SV* 13495759b3d2Safresh1DEFSV() 13505759b3d2Safresh1 CODE: 13515759b3d2Safresh1 RETVAL = newSVsv(DEFSV); 13525759b3d2Safresh1 OUTPUT: 13535759b3d2Safresh1 RETVAL 13545759b3d2Safresh1 13555759b3d2Safresh1void 13565759b3d2Safresh1DEFSV_modify() 13575759b3d2Safresh1 PPCODE: 13585759b3d2Safresh1 XPUSHs(sv_mortalcopy(DEFSV)); 13595759b3d2Safresh1 ENTER; 13605759b3d2Safresh1 SAVE_DEFSV; 13615759b3d2Safresh1 DEFSV_set(newSVpvs("DEFSV")); 13625759b3d2Safresh1 XPUSHs(sv_mortalcopy(DEFSV)); 13635759b3d2Safresh1 /* Yes, this leaks the above scalar; 5.005 with threads for some reason */ 13645759b3d2Safresh1 /* frees it upon LEAVE, thus mortalizing it causes "attempt to free..." */ 13655759b3d2Safresh1 /* sv_2mortal(DEFSV); */ 13665759b3d2Safresh1 LEAVE; 13675759b3d2Safresh1 XPUSHs(sv_mortalcopy(DEFSV)); 13685759b3d2Safresh1 XSRETURN(3); 13695759b3d2Safresh1 13705759b3d2Safresh1int 13715759b3d2Safresh1ERRSV() 13725759b3d2Safresh1 CODE: 1373de8cc8edSafresh1 RETVAL = SvTRUEx(ERRSV); 13745759b3d2Safresh1 OUTPUT: 13755759b3d2Safresh1 RETVAL 13765759b3d2Safresh1 13775759b3d2Safresh1SV* 13785759b3d2Safresh1UNDERBAR() 13795759b3d2Safresh1 CODE: 13805759b3d2Safresh1 { 13815759b3d2Safresh1 dUNDERBAR; 13825759b3d2Safresh1 RETVAL = newSVsv(UNDERBAR); 13835759b3d2Safresh1 } 13845759b3d2Safresh1 OUTPUT: 13855759b3d2Safresh1 RETVAL 13865759b3d2Safresh1 13875759b3d2Safresh1void 13885759b3d2Safresh1prepush() 13895759b3d2Safresh1 CODE: 13905759b3d2Safresh1 { 13915759b3d2Safresh1 dXSTARG; 13925759b3d2Safresh1 XSprePUSH; 13935759b3d2Safresh1 PUSHi(42); 13945759b3d2Safresh1 XSRETURN(1); 13955759b3d2Safresh1 } 13965759b3d2Safresh1 13975759b3d2Safresh1int 13985759b3d2Safresh1PERL_ABS(a) 13995759b3d2Safresh1 int a 14005759b3d2Safresh1 14015759b3d2Safresh1void 14025759b3d2Safresh1SVf(x) 14035759b3d2Safresh1 SV *x 14045759b3d2Safresh1 PPCODE: 14055759b3d2Safresh1#if { VERSION >= 5.004 } 14065759b3d2Safresh1 x = sv_2mortal(newSVpvf("[%" SVf "]", SVfARG(x))); 14075759b3d2Safresh1#endif 14085759b3d2Safresh1 XPUSHs(x); 14095759b3d2Safresh1 XSRETURN(1); 14105759b3d2Safresh1 14115759b3d2Safresh1void 14125759b3d2Safresh1Perl_ppaddr_t(string) 14135759b3d2Safresh1 char *string 14145759b3d2Safresh1 PREINIT: 14155759b3d2Safresh1 Perl_ppaddr_t lower; 14165759b3d2Safresh1 PPCODE: 14175759b3d2Safresh1 lower = PL_ppaddr[OP_LC]; 14185759b3d2Safresh1 mXPUSHs(newSVpv(string, 0)); 14195759b3d2Safresh1 PUTBACK; 14205759b3d2Safresh1 ENTER; 14215759b3d2Safresh1 (void)*(lower)(aTHXR); 14225759b3d2Safresh1 SPAGAIN; 14235759b3d2Safresh1 LEAVE; 14245759b3d2Safresh1 XSRETURN(1); 14255759b3d2Safresh1 14265759b3d2Safresh1#if { VERSION >= 5.8.0 } 14275759b3d2Safresh1 14285759b3d2Safresh1void 14295759b3d2Safresh1check_HeUTF8(utf8_key) 14305759b3d2Safresh1 SV *utf8_key; 14315759b3d2Safresh1 PREINIT: 14325759b3d2Safresh1 HV *hash; 14335759b3d2Safresh1 HE *ent; 14345759b3d2Safresh1 STRLEN klen; 14355759b3d2Safresh1 char *key; 14365759b3d2Safresh1 PPCODE: 14375759b3d2Safresh1 hash = newHV(); 14385759b3d2Safresh1 14395759b3d2Safresh1 key = SvPV(utf8_key, klen); 1440e0680481Safresh1 hv_store(hash, key, SvUTF8(utf8_key) ? -klen : klen, 1441e0680481Safresh1 newSVpvs("string"), 0); 14425759b3d2Safresh1 hv_iterinit(hash); 14435759b3d2Safresh1 ent = hv_iternext(hash); 14445759b3d2Safresh1 assert(ent); 14455759b3d2Safresh1 mXPUSHp((HeUTF8(ent) == 0 ? "norm" : "utf8"), 4); 14465759b3d2Safresh1 hv_undef(hash); 14475759b3d2Safresh1 14485759b3d2Safresh1 14495759b3d2Safresh1#endif 14505759b3d2Safresh1 14515759b3d2Safresh1void 14525759b3d2Safresh1check_c_array() 14535759b3d2Safresh1 PREINIT: 14545759b3d2Safresh1 int x[] = { 10, 11, 12, 13 }; 14555759b3d2Safresh1 PPCODE: 14565759b3d2Safresh1 mXPUSHi(C_ARRAY_LENGTH(x)); /* 4 */ 14575759b3d2Safresh1 mXPUSHi(*(C_ARRAY_END(x)-1)); /* 13 */ 14585759b3d2Safresh1 1459f3efcd01Safresh1bool 1460de8cc8edSafresh1isBLANK(ord) 1461de8cc8edSafresh1 UV ord 1462f3efcd01Safresh1 CODE: 1463f3efcd01Safresh1 RETVAL = isBLANK(ord); 1464f3efcd01Safresh1 OUTPUT: 1465f3efcd01Safresh1 RETVAL 1466f3efcd01Safresh1 1467f3efcd01Safresh1bool 1468de8cc8edSafresh1isBLANK_A(ord) 1469de8cc8edSafresh1 UV ord 1470f3efcd01Safresh1 CODE: 1471f3efcd01Safresh1 RETVAL = isBLANK_A(ord); 1472f3efcd01Safresh1 OUTPUT: 1473f3efcd01Safresh1 RETVAL 1474f3efcd01Safresh1 1475f3efcd01Safresh1bool 1476de8cc8edSafresh1isBLANK_L1(ord) 1477de8cc8edSafresh1 UV ord 1478de8cc8edSafresh1 CODE: 1479de8cc8edSafresh1 RETVAL = isBLANK_L1(ord); 1480de8cc8edSafresh1 OUTPUT: 1481de8cc8edSafresh1 RETVAL 1482de8cc8edSafresh1 1483de8cc8edSafresh1bool 1484de8cc8edSafresh1isUPPER(ord) 1485de8cc8edSafresh1 UV ord 1486f3efcd01Safresh1 CODE: 1487f3efcd01Safresh1 RETVAL = isUPPER(ord); 1488f3efcd01Safresh1 OUTPUT: 1489f3efcd01Safresh1 RETVAL 1490f3efcd01Safresh1 1491f3efcd01Safresh1bool 1492de8cc8edSafresh1isUPPER_A(ord) 1493de8cc8edSafresh1 UV ord 1494f3efcd01Safresh1 CODE: 1495f3efcd01Safresh1 RETVAL = isUPPER_A(ord); 1496f3efcd01Safresh1 OUTPUT: 1497f3efcd01Safresh1 RETVAL 1498f3efcd01Safresh1 1499f3efcd01Safresh1bool 1500de8cc8edSafresh1isUPPER_L1(ord) 1501de8cc8edSafresh1 UV ord 1502de8cc8edSafresh1 CODE: 1503de8cc8edSafresh1 RETVAL = isUPPER_L1(ord); 1504de8cc8edSafresh1 OUTPUT: 1505de8cc8edSafresh1 RETVAL 1506de8cc8edSafresh1 1507de8cc8edSafresh1bool 1508de8cc8edSafresh1isLOWER(ord) 1509de8cc8edSafresh1 UV ord 1510f3efcd01Safresh1 CODE: 1511f3efcd01Safresh1 RETVAL = isLOWER(ord); 1512f3efcd01Safresh1 OUTPUT: 1513f3efcd01Safresh1 RETVAL 1514f3efcd01Safresh1 1515f3efcd01Safresh1bool 1516de8cc8edSafresh1isLOWER_A(ord) 1517de8cc8edSafresh1 UV ord 1518f3efcd01Safresh1 CODE: 1519f3efcd01Safresh1 RETVAL = isLOWER_A(ord); 1520f3efcd01Safresh1 OUTPUT: 1521f3efcd01Safresh1 RETVAL 1522f3efcd01Safresh1 1523f3efcd01Safresh1bool 1524de8cc8edSafresh1isLOWER_L1(ord) 1525de8cc8edSafresh1 UV ord 1526de8cc8edSafresh1 CODE: 1527de8cc8edSafresh1 RETVAL = isLOWER_L1(ord); 1528de8cc8edSafresh1 OUTPUT: 1529de8cc8edSafresh1 RETVAL 1530de8cc8edSafresh1 1531de8cc8edSafresh1bool 1532de8cc8edSafresh1isALPHA(ord) 1533de8cc8edSafresh1 UV ord 1534f3efcd01Safresh1 CODE: 1535f3efcd01Safresh1 RETVAL = isALPHA(ord); 1536f3efcd01Safresh1 OUTPUT: 1537f3efcd01Safresh1 RETVAL 1538f3efcd01Safresh1 1539f3efcd01Safresh1bool 1540de8cc8edSafresh1isALPHA_A(ord) 1541de8cc8edSafresh1 UV ord 1542f3efcd01Safresh1 CODE: 1543f3efcd01Safresh1 RETVAL = isALPHA_A(ord); 1544f3efcd01Safresh1 OUTPUT: 1545f3efcd01Safresh1 RETVAL 1546f3efcd01Safresh1 1547f3efcd01Safresh1bool 1548de8cc8edSafresh1isALPHA_L1(ord) 1549de8cc8edSafresh1 UV ord 1550de8cc8edSafresh1 CODE: 1551de8cc8edSafresh1 RETVAL = isALPHA_L1(ord); 1552de8cc8edSafresh1 OUTPUT: 1553de8cc8edSafresh1 RETVAL 1554de8cc8edSafresh1 1555de8cc8edSafresh1bool 1556de8cc8edSafresh1isWORDCHAR(ord) 1557de8cc8edSafresh1 UV ord 1558f3efcd01Safresh1 CODE: 1559f3efcd01Safresh1 RETVAL = isWORDCHAR(ord); 1560f3efcd01Safresh1 OUTPUT: 1561f3efcd01Safresh1 RETVAL 1562f3efcd01Safresh1 1563f3efcd01Safresh1bool 1564de8cc8edSafresh1isWORDCHAR_A(ord) 1565de8cc8edSafresh1 UV ord 1566f3efcd01Safresh1 CODE: 1567f3efcd01Safresh1 RETVAL = isWORDCHAR_A(ord); 1568f3efcd01Safresh1 OUTPUT: 1569f3efcd01Safresh1 RETVAL 1570f3efcd01Safresh1 1571f3efcd01Safresh1bool 1572de8cc8edSafresh1isWORDCHAR_L1(ord) 1573de8cc8edSafresh1 UV ord 1574de8cc8edSafresh1 CODE: 1575de8cc8edSafresh1 RETVAL = isWORDCHAR_L1(ord); 1576de8cc8edSafresh1 OUTPUT: 1577de8cc8edSafresh1 RETVAL 1578de8cc8edSafresh1 1579de8cc8edSafresh1bool 1580de8cc8edSafresh1isALPHANUMERIC(ord) 1581de8cc8edSafresh1 UV ord 1582f3efcd01Safresh1 CODE: 1583f3efcd01Safresh1 RETVAL = isALPHANUMERIC(ord); 1584f3efcd01Safresh1 OUTPUT: 1585f3efcd01Safresh1 RETVAL 1586f3efcd01Safresh1 1587f3efcd01Safresh1bool 1588de8cc8edSafresh1isALPHANUMERIC_A(ord) 1589de8cc8edSafresh1 UV ord 1590f3efcd01Safresh1 CODE: 1591f3efcd01Safresh1 RETVAL = isALPHANUMERIC_A(ord); 1592f3efcd01Safresh1 OUTPUT: 1593f3efcd01Safresh1 RETVAL 1594f3efcd01Safresh1 1595f3efcd01Safresh1bool 1596de8cc8edSafresh1isALNUM(ord) 1597de8cc8edSafresh1 UV ord 1598f3efcd01Safresh1 CODE: 1599f3efcd01Safresh1 RETVAL = isALNUM(ord); 1600f3efcd01Safresh1 OUTPUT: 1601f3efcd01Safresh1 RETVAL 1602f3efcd01Safresh1 1603f3efcd01Safresh1bool 1604de8cc8edSafresh1isALNUM_A(ord) 1605de8cc8edSafresh1 UV ord 1606f3efcd01Safresh1 CODE: 1607f3efcd01Safresh1 RETVAL = isALNUM_A(ord); 1608f3efcd01Safresh1 OUTPUT: 1609f3efcd01Safresh1 RETVAL 1610f3efcd01Safresh1 1611f3efcd01Safresh1bool 1612de8cc8edSafresh1isDIGIT(ord) 1613de8cc8edSafresh1 UV ord 1614f3efcd01Safresh1 CODE: 1615f3efcd01Safresh1 RETVAL = isDIGIT(ord); 1616f3efcd01Safresh1 OUTPUT: 1617f3efcd01Safresh1 RETVAL 1618f3efcd01Safresh1 1619f3efcd01Safresh1bool 1620de8cc8edSafresh1isDIGIT_A(ord) 1621de8cc8edSafresh1 UV ord 1622f3efcd01Safresh1 CODE: 1623f3efcd01Safresh1 RETVAL = isDIGIT_A(ord); 1624f3efcd01Safresh1 OUTPUT: 1625f3efcd01Safresh1 RETVAL 1626f3efcd01Safresh1 1627f3efcd01Safresh1bool 1628de8cc8edSafresh1isOCTAL(ord) 1629de8cc8edSafresh1 UV ord 1630f3efcd01Safresh1 CODE: 1631f3efcd01Safresh1 RETVAL = isOCTAL(ord); 1632f3efcd01Safresh1 OUTPUT: 1633f3efcd01Safresh1 RETVAL 1634f3efcd01Safresh1 1635f3efcd01Safresh1bool 1636de8cc8edSafresh1isOCTAL_A(ord) 1637de8cc8edSafresh1 UV ord 1638f3efcd01Safresh1 CODE: 1639f3efcd01Safresh1 RETVAL = isOCTAL_A(ord); 1640f3efcd01Safresh1 OUTPUT: 1641f3efcd01Safresh1 RETVAL 1642f3efcd01Safresh1 1643f3efcd01Safresh1bool 1644de8cc8edSafresh1isIDFIRST(ord) 1645de8cc8edSafresh1 UV ord 1646f3efcd01Safresh1 CODE: 1647f3efcd01Safresh1 RETVAL = isIDFIRST(ord); 1648f3efcd01Safresh1 OUTPUT: 1649f3efcd01Safresh1 RETVAL 1650f3efcd01Safresh1 1651f3efcd01Safresh1bool 1652de8cc8edSafresh1isIDFIRST_A(ord) 1653de8cc8edSafresh1 UV ord 1654f3efcd01Safresh1 CODE: 1655f3efcd01Safresh1 RETVAL = isIDFIRST_A(ord); 1656f3efcd01Safresh1 OUTPUT: 1657f3efcd01Safresh1 RETVAL 1658f3efcd01Safresh1 1659f3efcd01Safresh1bool 1660de8cc8edSafresh1isIDCONT(ord) 1661de8cc8edSafresh1 UV ord 1662f3efcd01Safresh1 CODE: 1663f3efcd01Safresh1 RETVAL = isIDCONT(ord); 1664f3efcd01Safresh1 OUTPUT: 1665f3efcd01Safresh1 RETVAL 1666f3efcd01Safresh1 1667f3efcd01Safresh1bool 1668de8cc8edSafresh1isIDCONT_A(ord) 1669de8cc8edSafresh1 UV ord 1670f3efcd01Safresh1 CODE: 1671f3efcd01Safresh1 RETVAL = isIDCONT_A(ord); 1672f3efcd01Safresh1 OUTPUT: 1673f3efcd01Safresh1 RETVAL 1674f3efcd01Safresh1 1675f3efcd01Safresh1bool 1676de8cc8edSafresh1isSPACE(ord) 1677de8cc8edSafresh1 UV ord 1678f3efcd01Safresh1 CODE: 1679f3efcd01Safresh1 RETVAL = isSPACE(ord); 1680f3efcd01Safresh1 OUTPUT: 1681f3efcd01Safresh1 RETVAL 1682f3efcd01Safresh1 1683f3efcd01Safresh1bool 1684de8cc8edSafresh1isSPACE_A(ord) 1685de8cc8edSafresh1 UV ord 1686f3efcd01Safresh1 CODE: 1687f3efcd01Safresh1 RETVAL = isSPACE_A(ord); 1688f3efcd01Safresh1 OUTPUT: 1689f3efcd01Safresh1 RETVAL 1690f3efcd01Safresh1 1691f3efcd01Safresh1bool 1692de8cc8edSafresh1isASCII(ord) 1693de8cc8edSafresh1 UV ord 1694f3efcd01Safresh1 CODE: 1695f3efcd01Safresh1 RETVAL = isASCII(ord); 1696f3efcd01Safresh1 OUTPUT: 1697f3efcd01Safresh1 RETVAL 1698f3efcd01Safresh1 1699f3efcd01Safresh1bool 1700de8cc8edSafresh1isASCII_A(ord) 1701de8cc8edSafresh1 UV ord 1702f3efcd01Safresh1 CODE: 1703f3efcd01Safresh1 RETVAL = isASCII_A(ord); 1704f3efcd01Safresh1 OUTPUT: 1705f3efcd01Safresh1 RETVAL 1706f3efcd01Safresh1 1707f3efcd01Safresh1bool 1708de8cc8edSafresh1isCNTRL(ord) 1709de8cc8edSafresh1 UV ord 1710f3efcd01Safresh1 CODE: 1711f3efcd01Safresh1 RETVAL = isCNTRL(ord); 1712f3efcd01Safresh1 OUTPUT: 1713f3efcd01Safresh1 RETVAL 1714f3efcd01Safresh1 1715f3efcd01Safresh1bool 1716de8cc8edSafresh1isCNTRL_A(ord) 1717de8cc8edSafresh1 UV ord 1718f3efcd01Safresh1 CODE: 1719f3efcd01Safresh1 RETVAL = isCNTRL_A(ord); 1720f3efcd01Safresh1 OUTPUT: 1721f3efcd01Safresh1 RETVAL 1722f3efcd01Safresh1 1723f3efcd01Safresh1bool 1724de8cc8edSafresh1isPRINT(ord) 1725de8cc8edSafresh1 UV ord 1726f3efcd01Safresh1 CODE: 1727f3efcd01Safresh1 RETVAL = isPRINT(ord); 1728f3efcd01Safresh1 OUTPUT: 1729f3efcd01Safresh1 RETVAL 1730f3efcd01Safresh1 1731f3efcd01Safresh1bool 1732de8cc8edSafresh1isPRINT_A(ord) 1733de8cc8edSafresh1 UV ord 1734f3efcd01Safresh1 CODE: 1735f3efcd01Safresh1 RETVAL = isPRINT_A(ord); 1736f3efcd01Safresh1 OUTPUT: 1737f3efcd01Safresh1 RETVAL 1738f3efcd01Safresh1 1739f3efcd01Safresh1bool 1740de8cc8edSafresh1isGRAPH(ord) 1741de8cc8edSafresh1 UV ord 1742f3efcd01Safresh1 CODE: 1743f3efcd01Safresh1 RETVAL = isGRAPH(ord); 1744f3efcd01Safresh1 OUTPUT: 1745f3efcd01Safresh1 RETVAL 1746f3efcd01Safresh1 1747f3efcd01Safresh1bool 1748de8cc8edSafresh1isGRAPH_A(ord) 1749de8cc8edSafresh1 UV ord 1750f3efcd01Safresh1 CODE: 1751f3efcd01Safresh1 RETVAL = isGRAPH_A(ord); 1752f3efcd01Safresh1 OUTPUT: 1753f3efcd01Safresh1 RETVAL 1754f3efcd01Safresh1 1755f3efcd01Safresh1bool 1756de8cc8edSafresh1isPUNCT(ord) 1757de8cc8edSafresh1 UV ord 1758f3efcd01Safresh1 CODE: 1759f3efcd01Safresh1 RETVAL = isPUNCT(ord); 1760f3efcd01Safresh1 OUTPUT: 1761f3efcd01Safresh1 RETVAL 1762f3efcd01Safresh1 1763f3efcd01Safresh1bool 1764de8cc8edSafresh1isPUNCT_A(ord) 1765de8cc8edSafresh1 UV ord 1766f3efcd01Safresh1 CODE: 1767f3efcd01Safresh1 RETVAL = isPUNCT_A(ord); 1768f3efcd01Safresh1 OUTPUT: 1769f3efcd01Safresh1 RETVAL 1770f3efcd01Safresh1 1771f3efcd01Safresh1bool 1772de8cc8edSafresh1isXDIGIT(ord) 1773de8cc8edSafresh1 UV ord 1774f3efcd01Safresh1 CODE: 1775f3efcd01Safresh1 RETVAL = isXDIGIT(ord); 1776f3efcd01Safresh1 OUTPUT: 1777f3efcd01Safresh1 RETVAL 1778f3efcd01Safresh1 1779f3efcd01Safresh1bool 1780de8cc8edSafresh1isXDIGIT_A(ord) 1781de8cc8edSafresh1 UV ord 1782f3efcd01Safresh1 CODE: 1783f3efcd01Safresh1 RETVAL = isXDIGIT_A(ord); 1784f3efcd01Safresh1 OUTPUT: 1785f3efcd01Safresh1 RETVAL 1786f3efcd01Safresh1 1787f3efcd01Safresh1bool 1788de8cc8edSafresh1isPSXSPC(ord) 1789de8cc8edSafresh1 UV ord 1790f3efcd01Safresh1 CODE: 1791f3efcd01Safresh1 RETVAL = isPSXSPC(ord); 1792f3efcd01Safresh1 OUTPUT: 1793f3efcd01Safresh1 RETVAL 1794f3efcd01Safresh1 1795f3efcd01Safresh1bool 1796de8cc8edSafresh1isPSXSPC_A(ord) 1797de8cc8edSafresh1 UV ord 1798f3efcd01Safresh1 CODE: 1799f3efcd01Safresh1 RETVAL = isPSXSPC_A(ord); 1800f3efcd01Safresh1 OUTPUT: 1801f3efcd01Safresh1 RETVAL 1802f3efcd01Safresh1 1803de8cc8edSafresh1bool 1804de8cc8edSafresh1isALPHANUMERIC_L1(ord) 1805de8cc8edSafresh1 UV ord 1806de8cc8edSafresh1 CODE: 1807de8cc8edSafresh1 RETVAL = isALPHANUMERIC_L1(ord); 1808de8cc8edSafresh1 OUTPUT: 1809de8cc8edSafresh1 RETVAL 1810de8cc8edSafresh1 1811de8cc8edSafresh1bool 1812de8cc8edSafresh1isALNUMC_L1(ord) 1813de8cc8edSafresh1 UV ord 1814de8cc8edSafresh1 CODE: 1815de8cc8edSafresh1 RETVAL = isALNUMC_L1(ord); 1816de8cc8edSafresh1 OUTPUT: 1817de8cc8edSafresh1 RETVAL 1818de8cc8edSafresh1 1819de8cc8edSafresh1bool 1820de8cc8edSafresh1isDIGIT_L1(ord) 1821de8cc8edSafresh1 UV ord 1822de8cc8edSafresh1 CODE: 1823de8cc8edSafresh1 RETVAL = isDIGIT_L1(ord); 1824de8cc8edSafresh1 OUTPUT: 1825de8cc8edSafresh1 RETVAL 1826de8cc8edSafresh1 1827de8cc8edSafresh1bool 1828de8cc8edSafresh1isOCTAL_L1(ord) 1829de8cc8edSafresh1 UV ord 1830de8cc8edSafresh1 CODE: 1831de8cc8edSafresh1 RETVAL = isOCTAL_L1(ord); 1832de8cc8edSafresh1 OUTPUT: 1833de8cc8edSafresh1 RETVAL 1834de8cc8edSafresh1 1835de8cc8edSafresh1bool 1836de8cc8edSafresh1isIDFIRST_L1(ord) 1837de8cc8edSafresh1 UV ord 1838de8cc8edSafresh1 CODE: 1839de8cc8edSafresh1 RETVAL = isIDFIRST_L1(ord); 1840de8cc8edSafresh1 OUTPUT: 1841de8cc8edSafresh1 RETVAL 1842de8cc8edSafresh1 1843de8cc8edSafresh1bool 1844de8cc8edSafresh1isIDCONT_L1(ord) 1845de8cc8edSafresh1 UV ord 1846de8cc8edSafresh1 CODE: 1847de8cc8edSafresh1 RETVAL = isIDCONT_L1(ord); 1848de8cc8edSafresh1 OUTPUT: 1849de8cc8edSafresh1 RETVAL 1850de8cc8edSafresh1 1851de8cc8edSafresh1bool 1852de8cc8edSafresh1isSPACE_L1(ord) 1853de8cc8edSafresh1 UV ord 1854de8cc8edSafresh1 CODE: 1855de8cc8edSafresh1 RETVAL = isSPACE_L1(ord); 1856de8cc8edSafresh1 OUTPUT: 1857de8cc8edSafresh1 RETVAL 1858de8cc8edSafresh1 1859de8cc8edSafresh1bool 1860de8cc8edSafresh1isASCII_L1(ord) 1861de8cc8edSafresh1 UV ord 1862de8cc8edSafresh1 CODE: 1863de8cc8edSafresh1 RETVAL = isASCII_L1(ord); 1864de8cc8edSafresh1 OUTPUT: 1865de8cc8edSafresh1 RETVAL 1866de8cc8edSafresh1 1867de8cc8edSafresh1bool 1868de8cc8edSafresh1isCNTRL_L1(ord) 1869de8cc8edSafresh1 UV ord 1870de8cc8edSafresh1 CODE: 1871de8cc8edSafresh1 RETVAL = isCNTRL_L1(ord); 1872de8cc8edSafresh1 OUTPUT: 1873de8cc8edSafresh1 RETVAL 1874de8cc8edSafresh1 1875de8cc8edSafresh1bool 1876de8cc8edSafresh1isPRINT_L1(ord) 1877de8cc8edSafresh1 UV ord 1878de8cc8edSafresh1 CODE: 1879de8cc8edSafresh1 RETVAL = isPRINT_L1(ord); 1880de8cc8edSafresh1 OUTPUT: 1881de8cc8edSafresh1 RETVAL 1882de8cc8edSafresh1 1883de8cc8edSafresh1bool 1884de8cc8edSafresh1isGRAPH_L1(ord) 1885de8cc8edSafresh1 UV ord 1886de8cc8edSafresh1 CODE: 1887de8cc8edSafresh1 RETVAL = isGRAPH_L1(ord); 1888de8cc8edSafresh1 OUTPUT: 1889de8cc8edSafresh1 RETVAL 1890de8cc8edSafresh1 1891de8cc8edSafresh1bool 1892de8cc8edSafresh1isPUNCT_L1(ord) 1893de8cc8edSafresh1 UV ord 1894de8cc8edSafresh1 CODE: 1895de8cc8edSafresh1 RETVAL = isPUNCT_L1(ord); 1896de8cc8edSafresh1 OUTPUT: 1897de8cc8edSafresh1 RETVAL 1898de8cc8edSafresh1 1899de8cc8edSafresh1bool 1900de8cc8edSafresh1isXDIGIT_L1(ord) 1901de8cc8edSafresh1 UV ord 1902de8cc8edSafresh1 CODE: 1903de8cc8edSafresh1 RETVAL = isXDIGIT_L1(ord); 1904de8cc8edSafresh1 OUTPUT: 1905de8cc8edSafresh1 RETVAL 1906de8cc8edSafresh1 1907de8cc8edSafresh1bool 1908de8cc8edSafresh1isPSXSPC_L1(ord) 1909de8cc8edSafresh1 UV ord 1910de8cc8edSafresh1 CODE: 1911de8cc8edSafresh1 RETVAL = isPSXSPC_L1(ord); 1912de8cc8edSafresh1 OUTPUT: 1913de8cc8edSafresh1 RETVAL 1914de8cc8edSafresh1 1915de8cc8edSafresh1bool 1916de8cc8edSafresh1isASCII_uvchr(ord) 1917de8cc8edSafresh1 UV ord 1918de8cc8edSafresh1 CODE: 1919de8cc8edSafresh1 RETVAL = isASCII_uvchr(ord); 1920de8cc8edSafresh1 OUTPUT: 1921de8cc8edSafresh1 RETVAL 1922de8cc8edSafresh1 1923de8cc8edSafresh1bool 1924de8cc8edSafresh1isASCII_utf8_safe(s, offset) 1925de8cc8edSafresh1 unsigned char * s 1926de8cc8edSafresh1 int offset 1927de8cc8edSafresh1 CODE: 1928de8cc8edSafresh1 PERL_UNUSED_ARG(offset); 1929de8cc8edSafresh1 RETVAL = isASCII_utf8_safe(s, s + 1 + offset); 1930de8cc8edSafresh1 OUTPUT: 1931de8cc8edSafresh1 RETVAL 1932de8cc8edSafresh1 1933de8cc8edSafresh1#if { VERSION >= 5.006 } 1934de8cc8edSafresh1 1935de8cc8edSafresh1bool 1936de8cc8edSafresh1isBLANK_uvchr(ord) 1937de8cc8edSafresh1 UV ord 1938de8cc8edSafresh1 CODE: 1939de8cc8edSafresh1 RETVAL = isBLANK_uvchr(ord); 1940de8cc8edSafresh1 OUTPUT: 1941de8cc8edSafresh1 RETVAL 1942de8cc8edSafresh1 1943de8cc8edSafresh1bool 1944de8cc8edSafresh1isALPHA_uvchr(ord) 1945de8cc8edSafresh1 UV ord 1946de8cc8edSafresh1 CODE: 1947de8cc8edSafresh1 RETVAL = isALPHA_uvchr(ord); 1948de8cc8edSafresh1 OUTPUT: 1949de8cc8edSafresh1 RETVAL 1950de8cc8edSafresh1 1951de8cc8edSafresh1bool 1952de8cc8edSafresh1isALPHANUMERIC_uvchr(ord) 1953de8cc8edSafresh1 UV ord 1954de8cc8edSafresh1 CODE: 1955de8cc8edSafresh1 RETVAL = isALPHANUMERIC_uvchr(ord); 1956de8cc8edSafresh1 OUTPUT: 1957de8cc8edSafresh1 RETVAL 1958de8cc8edSafresh1 1959de8cc8edSafresh1bool 1960de8cc8edSafresh1isCNTRL_uvchr(ord) 1961de8cc8edSafresh1 UV ord 1962de8cc8edSafresh1 CODE: 1963de8cc8edSafresh1 RETVAL = isCNTRL_uvchr(ord); 1964de8cc8edSafresh1 OUTPUT: 1965de8cc8edSafresh1 RETVAL 1966de8cc8edSafresh1 1967de8cc8edSafresh1bool 1968de8cc8edSafresh1isDIGIT_uvchr(ord) 1969de8cc8edSafresh1 UV ord 1970de8cc8edSafresh1 CODE: 1971de8cc8edSafresh1 RETVAL = isDIGIT_uvchr(ord); 1972de8cc8edSafresh1 OUTPUT: 1973de8cc8edSafresh1 RETVAL 1974de8cc8edSafresh1 1975de8cc8edSafresh1bool 1976de8cc8edSafresh1isIDFIRST_uvchr(ord) 1977de8cc8edSafresh1 UV ord 1978de8cc8edSafresh1 CODE: 1979de8cc8edSafresh1 RETVAL = isIDFIRST_uvchr(ord); 1980de8cc8edSafresh1 OUTPUT: 1981de8cc8edSafresh1 RETVAL 1982de8cc8edSafresh1 1983de8cc8edSafresh1bool 1984de8cc8edSafresh1isIDCONT_uvchr(ord) 1985de8cc8edSafresh1 UV ord 1986de8cc8edSafresh1 CODE: 1987de8cc8edSafresh1 RETVAL = isIDCONT_uvchr(ord); 1988de8cc8edSafresh1 OUTPUT: 1989de8cc8edSafresh1 RETVAL 1990de8cc8edSafresh1 1991de8cc8edSafresh1bool 1992de8cc8edSafresh1isGRAPH_uvchr(ord) 1993de8cc8edSafresh1 UV ord 1994de8cc8edSafresh1 CODE: 1995de8cc8edSafresh1 RETVAL = isGRAPH_uvchr(ord); 1996de8cc8edSafresh1 OUTPUT: 1997de8cc8edSafresh1 RETVAL 1998de8cc8edSafresh1 1999de8cc8edSafresh1bool 2000de8cc8edSafresh1isLOWER_uvchr(ord) 2001de8cc8edSafresh1 UV ord 2002de8cc8edSafresh1 CODE: 2003de8cc8edSafresh1 RETVAL = isLOWER_uvchr(ord); 2004de8cc8edSafresh1 OUTPUT: 2005de8cc8edSafresh1 RETVAL 2006de8cc8edSafresh1 2007de8cc8edSafresh1bool 2008de8cc8edSafresh1isPRINT_uvchr(ord) 2009de8cc8edSafresh1 UV ord 2010de8cc8edSafresh1 CODE: 2011de8cc8edSafresh1 RETVAL = isPRINT_uvchr(ord); 2012de8cc8edSafresh1 OUTPUT: 2013de8cc8edSafresh1 RETVAL 2014de8cc8edSafresh1 2015de8cc8edSafresh1bool 2016de8cc8edSafresh1isPSXSPC_uvchr(ord) 2017de8cc8edSafresh1 UV ord 2018de8cc8edSafresh1 CODE: 2019de8cc8edSafresh1 RETVAL = isPSXSPC_uvchr(ord); 2020de8cc8edSafresh1 OUTPUT: 2021de8cc8edSafresh1 RETVAL 2022de8cc8edSafresh1 2023de8cc8edSafresh1bool 2024de8cc8edSafresh1isPUNCT_uvchr(ord) 2025de8cc8edSafresh1 UV ord 2026de8cc8edSafresh1 CODE: 2027de8cc8edSafresh1 RETVAL = isPUNCT_uvchr(ord); 2028de8cc8edSafresh1 OUTPUT: 2029de8cc8edSafresh1 RETVAL 2030de8cc8edSafresh1 2031de8cc8edSafresh1bool 2032de8cc8edSafresh1isSPACE_uvchr(ord) 2033de8cc8edSafresh1 UV ord 2034de8cc8edSafresh1 CODE: 2035de8cc8edSafresh1 RETVAL = isSPACE_uvchr(ord); 2036de8cc8edSafresh1 OUTPUT: 2037de8cc8edSafresh1 RETVAL 2038de8cc8edSafresh1 2039de8cc8edSafresh1bool 2040de8cc8edSafresh1isUPPER_uvchr(ord) 2041de8cc8edSafresh1 UV ord 2042de8cc8edSafresh1 CODE: 2043de8cc8edSafresh1 RETVAL = isUPPER_uvchr(ord); 2044de8cc8edSafresh1 OUTPUT: 2045de8cc8edSafresh1 RETVAL 2046de8cc8edSafresh1 2047de8cc8edSafresh1bool 2048de8cc8edSafresh1isWORDCHAR_uvchr(ord) 2049de8cc8edSafresh1 UV ord 2050de8cc8edSafresh1 CODE: 2051de8cc8edSafresh1 RETVAL = isWORDCHAR_uvchr(ord); 2052de8cc8edSafresh1 OUTPUT: 2053de8cc8edSafresh1 RETVAL 2054de8cc8edSafresh1 2055de8cc8edSafresh1bool 2056de8cc8edSafresh1isXDIGIT_uvchr(ord) 2057de8cc8edSafresh1 UV ord 2058de8cc8edSafresh1 CODE: 2059de8cc8edSafresh1 RETVAL = isXDIGIT_uvchr(ord); 2060de8cc8edSafresh1 OUTPUT: 2061de8cc8edSafresh1 RETVAL 2062de8cc8edSafresh1 2063de8cc8edSafresh1bool 2064de8cc8edSafresh1isALPHA_utf8_safe(s, offset) 2065de8cc8edSafresh1 unsigned char * s 2066de8cc8edSafresh1 int offset 2067de8cc8edSafresh1 CODE: 2068de8cc8edSafresh1 RETVAL = isALPHA_utf8_safe(s, s + UTF8SKIP(s) + offset); 2069de8cc8edSafresh1 OUTPUT: 2070de8cc8edSafresh1 RETVAL 2071de8cc8edSafresh1 2072de8cc8edSafresh1bool 2073de8cc8edSafresh1isALPHANUMERIC_utf8_safe(s, offset) 2074de8cc8edSafresh1 unsigned char * s 2075de8cc8edSafresh1 int offset 2076de8cc8edSafresh1 CODE: 2077de8cc8edSafresh1 RETVAL = isALPHANUMERIC_utf8_safe(s, s + UTF8SKIP(s) + offset); 2078de8cc8edSafresh1 OUTPUT: 2079de8cc8edSafresh1 RETVAL 2080de8cc8edSafresh1 2081de8cc8edSafresh1bool 2082de8cc8edSafresh1isBLANK_utf8_safe(s, offset) 2083de8cc8edSafresh1 unsigned char * s 2084de8cc8edSafresh1 int offset 2085de8cc8edSafresh1 CODE: 2086de8cc8edSafresh1 RETVAL = isBLANK_utf8_safe(s, s + UTF8SKIP(s) + offset); 2087de8cc8edSafresh1 OUTPUT: 2088de8cc8edSafresh1 RETVAL 2089de8cc8edSafresh1 2090de8cc8edSafresh1bool 2091de8cc8edSafresh1isCNTRL_utf8_safe(s, offset) 2092de8cc8edSafresh1 unsigned char * s 2093de8cc8edSafresh1 int offset 2094de8cc8edSafresh1 CODE: 2095de8cc8edSafresh1 RETVAL = isCNTRL_utf8_safe(s, s + UTF8SKIP(s) + offset); 2096de8cc8edSafresh1 OUTPUT: 2097de8cc8edSafresh1 RETVAL 2098de8cc8edSafresh1 2099de8cc8edSafresh1bool 2100de8cc8edSafresh1isDIGIT_utf8_safe(s, offset) 2101de8cc8edSafresh1 unsigned char * s 2102de8cc8edSafresh1 int offset 2103de8cc8edSafresh1 CODE: 2104de8cc8edSafresh1 RETVAL = isDIGIT_utf8_safe(s, s + UTF8SKIP(s) + offset); 2105de8cc8edSafresh1 OUTPUT: 2106de8cc8edSafresh1 RETVAL 2107de8cc8edSafresh1 2108de8cc8edSafresh1bool 2109de8cc8edSafresh1isGRAPH_utf8_safe(s, offset) 2110de8cc8edSafresh1 unsigned char * s 2111de8cc8edSafresh1 int offset 2112de8cc8edSafresh1 CODE: 2113de8cc8edSafresh1 RETVAL = isGRAPH_utf8_safe(s, s + UTF8SKIP(s) + offset); 2114de8cc8edSafresh1 OUTPUT: 2115de8cc8edSafresh1 RETVAL 2116de8cc8edSafresh1 2117de8cc8edSafresh1bool 2118de8cc8edSafresh1isIDCONT_utf8_safe(s, offset) 2119de8cc8edSafresh1 unsigned char * s 2120de8cc8edSafresh1 int offset 2121de8cc8edSafresh1 CODE: 2122de8cc8edSafresh1 RETVAL = isIDCONT_utf8_safe(s, s + UTF8SKIP(s) + offset); 2123de8cc8edSafresh1 OUTPUT: 2124de8cc8edSafresh1 RETVAL 2125de8cc8edSafresh1 2126de8cc8edSafresh1bool 2127de8cc8edSafresh1isIDFIRST_utf8_safe(s, offset) 2128de8cc8edSafresh1 unsigned char * s 2129de8cc8edSafresh1 int offset 2130de8cc8edSafresh1 CODE: 2131de8cc8edSafresh1 RETVAL = isIDFIRST_utf8_safe(s, s + UTF8SKIP(s) + offset); 2132de8cc8edSafresh1 OUTPUT: 2133de8cc8edSafresh1 RETVAL 2134de8cc8edSafresh1 2135de8cc8edSafresh1bool 2136de8cc8edSafresh1isLOWER_utf8_safe(s, offset) 2137de8cc8edSafresh1 unsigned char * s 2138de8cc8edSafresh1 int offset 2139de8cc8edSafresh1 CODE: 2140de8cc8edSafresh1 RETVAL = isLOWER_utf8_safe(s, s + UTF8SKIP(s) + offset); 2141de8cc8edSafresh1 OUTPUT: 2142de8cc8edSafresh1 RETVAL 2143de8cc8edSafresh1 2144de8cc8edSafresh1bool 2145de8cc8edSafresh1isPRINT_utf8_safe(s, offset) 2146de8cc8edSafresh1 unsigned char * s 2147de8cc8edSafresh1 int offset 2148de8cc8edSafresh1 CODE: 2149de8cc8edSafresh1 RETVAL = isPRINT_utf8_safe(s, s + UTF8SKIP(s) + offset); 2150de8cc8edSafresh1 OUTPUT: 2151de8cc8edSafresh1 RETVAL 2152de8cc8edSafresh1 2153de8cc8edSafresh1bool 2154de8cc8edSafresh1isPSXSPC_utf8_safe(s, offset) 2155de8cc8edSafresh1 unsigned char * s 2156de8cc8edSafresh1 int offset 2157de8cc8edSafresh1 CODE: 2158de8cc8edSafresh1 RETVAL = isPSXSPC_utf8_safe(s, s + UTF8SKIP(s) + offset); 2159de8cc8edSafresh1 OUTPUT: 2160de8cc8edSafresh1 RETVAL 2161de8cc8edSafresh1 2162de8cc8edSafresh1bool 2163de8cc8edSafresh1isPUNCT_utf8_safe(s, offset) 2164de8cc8edSafresh1 unsigned char * s 2165de8cc8edSafresh1 int offset 2166de8cc8edSafresh1 CODE: 2167de8cc8edSafresh1 RETVAL = isPUNCT_utf8_safe(s, s + UTF8SKIP(s) + offset); 2168de8cc8edSafresh1 OUTPUT: 2169de8cc8edSafresh1 RETVAL 2170de8cc8edSafresh1 2171de8cc8edSafresh1bool 2172de8cc8edSafresh1isSPACE_utf8_safe(s, offset) 2173de8cc8edSafresh1 unsigned char * s 2174de8cc8edSafresh1 int offset 2175de8cc8edSafresh1 CODE: 2176de8cc8edSafresh1 RETVAL = isSPACE_utf8_safe(s, s + UTF8SKIP(s) + offset); 2177de8cc8edSafresh1 OUTPUT: 2178de8cc8edSafresh1 RETVAL 2179de8cc8edSafresh1 2180de8cc8edSafresh1bool 2181de8cc8edSafresh1isUPPER_utf8_safe(s, offset) 2182de8cc8edSafresh1 unsigned char * s 2183de8cc8edSafresh1 int offset 2184de8cc8edSafresh1 CODE: 2185de8cc8edSafresh1 RETVAL = isUPPER_utf8_safe(s, s + UTF8SKIP(s) + offset); 2186de8cc8edSafresh1 OUTPUT: 2187de8cc8edSafresh1 RETVAL 2188de8cc8edSafresh1 2189de8cc8edSafresh1bool 2190de8cc8edSafresh1isWORDCHAR_utf8_safe(s, offset) 2191de8cc8edSafresh1 unsigned char * s 2192de8cc8edSafresh1 int offset 2193de8cc8edSafresh1 CODE: 2194de8cc8edSafresh1 RETVAL = isWORDCHAR_utf8_safe(s, s + UTF8SKIP(s) + offset); 2195de8cc8edSafresh1 OUTPUT: 2196de8cc8edSafresh1 RETVAL 2197de8cc8edSafresh1 2198de8cc8edSafresh1bool 2199de8cc8edSafresh1isXDIGIT_utf8_safe(s, offset) 2200de8cc8edSafresh1 unsigned char * s 2201de8cc8edSafresh1 int offset 2202de8cc8edSafresh1 CODE: 2203de8cc8edSafresh1 RETVAL = isXDIGIT_utf8_safe(s, s + UTF8SKIP(s) + offset); 2204de8cc8edSafresh1 OUTPUT: 2205de8cc8edSafresh1 RETVAL 2206de8cc8edSafresh1 2207de8cc8edSafresh1bool 2208de8cc8edSafresh1isALPHA_LC_utf8_safe(s, offset) 2209de8cc8edSafresh1 unsigned char * s 2210de8cc8edSafresh1 int offset 2211de8cc8edSafresh1 CODE: 2212de8cc8edSafresh1 RETVAL = isALPHA_LC_utf8_safe(s, s + UTF8SKIP(s) + offset); 2213de8cc8edSafresh1 OUTPUT: 2214de8cc8edSafresh1 RETVAL 2215de8cc8edSafresh1 2216de8cc8edSafresh1bool 2217de8cc8edSafresh1isALPHANUMERIC_LC_utf8_safe(s, offset) 2218de8cc8edSafresh1 unsigned char * s 2219de8cc8edSafresh1 int offset 2220de8cc8edSafresh1 CODE: 2221de8cc8edSafresh1 RETVAL = isALPHANUMERIC_LC_utf8_safe(s, s + UTF8SKIP(s) + offset); 2222de8cc8edSafresh1 OUTPUT: 2223de8cc8edSafresh1 RETVAL 2224de8cc8edSafresh1 2225de8cc8edSafresh1bool 2226de8cc8edSafresh1isASCII_LC_utf8_safe(s, offset) 2227de8cc8edSafresh1 unsigned char * s 2228de8cc8edSafresh1 int offset 2229de8cc8edSafresh1 CODE: 2230de8cc8edSafresh1 PERL_UNUSED_ARG(offset); 2231de8cc8edSafresh1 RETVAL = isASCII_utf8_safe(s, s + UTF8SKIP(s) + offset); 2232de8cc8edSafresh1 OUTPUT: 2233de8cc8edSafresh1 RETVAL 2234de8cc8edSafresh1 2235de8cc8edSafresh1bool 2236de8cc8edSafresh1isBLANK_LC_utf8_safe(s, offset) 2237de8cc8edSafresh1 unsigned char * s 2238de8cc8edSafresh1 int offset 2239de8cc8edSafresh1 CODE: 2240de8cc8edSafresh1 RETVAL = isBLANK_LC_utf8_safe(s, s + UTF8SKIP(s) + offset); 2241de8cc8edSafresh1 OUTPUT: 2242de8cc8edSafresh1 RETVAL 2243de8cc8edSafresh1 2244de8cc8edSafresh1bool 2245de8cc8edSafresh1isCNTRL_LC_utf8_safe(s, offset) 2246de8cc8edSafresh1 unsigned char * s 2247de8cc8edSafresh1 int offset 2248de8cc8edSafresh1 CODE: 2249de8cc8edSafresh1 RETVAL = isCNTRL_LC_utf8_safe(s, s + UTF8SKIP(s) + offset); 2250de8cc8edSafresh1 OUTPUT: 2251de8cc8edSafresh1 RETVAL 2252de8cc8edSafresh1 2253de8cc8edSafresh1bool 2254de8cc8edSafresh1isDIGIT_LC_utf8_safe(s, offset) 2255de8cc8edSafresh1 unsigned char * s 2256de8cc8edSafresh1 int offset 2257de8cc8edSafresh1 CODE: 2258de8cc8edSafresh1 RETVAL = isDIGIT_LC_utf8_safe(s, s + UTF8SKIP(s) + offset); 2259de8cc8edSafresh1 OUTPUT: 2260de8cc8edSafresh1 RETVAL 2261de8cc8edSafresh1 2262de8cc8edSafresh1bool 2263de8cc8edSafresh1isGRAPH_LC_utf8_safe(s, offset) 2264de8cc8edSafresh1 unsigned char * s 2265de8cc8edSafresh1 int offset 2266de8cc8edSafresh1 CODE: 2267de8cc8edSafresh1 RETVAL = isGRAPH_LC_utf8_safe(s, s + UTF8SKIP(s) + offset); 2268de8cc8edSafresh1 OUTPUT: 2269de8cc8edSafresh1 RETVAL 2270de8cc8edSafresh1 2271de8cc8edSafresh1bool 2272de8cc8edSafresh1isIDCONT_LC_utf8_safe(s, offset) 2273de8cc8edSafresh1 unsigned char * s 2274de8cc8edSafresh1 int offset 2275de8cc8edSafresh1 CODE: 2276de8cc8edSafresh1 RETVAL = isIDCONT_LC_utf8_safe(s, s + UTF8SKIP(s) + offset); 2277de8cc8edSafresh1 OUTPUT: 2278de8cc8edSafresh1 RETVAL 2279de8cc8edSafresh1 2280de8cc8edSafresh1bool 2281de8cc8edSafresh1isIDFIRST_LC_utf8_safe(s, offset) 2282de8cc8edSafresh1 unsigned char * s 2283de8cc8edSafresh1 int offset 2284de8cc8edSafresh1 CODE: 2285de8cc8edSafresh1 RETVAL = isIDFIRST_LC_utf8_safe(s, s + UTF8SKIP(s) + offset); 2286de8cc8edSafresh1 OUTPUT: 2287de8cc8edSafresh1 RETVAL 2288de8cc8edSafresh1 2289de8cc8edSafresh1bool 2290de8cc8edSafresh1isLOWER_LC_utf8_safe(s, offset) 2291de8cc8edSafresh1 unsigned char * s 2292de8cc8edSafresh1 int offset 2293de8cc8edSafresh1 CODE: 2294de8cc8edSafresh1 RETVAL = isLOWER_LC_utf8_safe(s, s + UTF8SKIP(s) + offset); 2295de8cc8edSafresh1 OUTPUT: 2296de8cc8edSafresh1 RETVAL 2297de8cc8edSafresh1 2298de8cc8edSafresh1bool 2299de8cc8edSafresh1isPRINT_LC_utf8_safe(s, offset) 2300de8cc8edSafresh1 unsigned char * s 2301de8cc8edSafresh1 int offset 2302de8cc8edSafresh1 CODE: 2303de8cc8edSafresh1 RETVAL = isPRINT_LC_utf8_safe(s, s + UTF8SKIP(s) + offset); 2304de8cc8edSafresh1 OUTPUT: 2305de8cc8edSafresh1 RETVAL 2306de8cc8edSafresh1 2307de8cc8edSafresh1bool 2308de8cc8edSafresh1isPSXSPC_LC_utf8_safe(s, offset) 2309de8cc8edSafresh1 unsigned char * s 2310de8cc8edSafresh1 int offset 2311de8cc8edSafresh1 CODE: 2312de8cc8edSafresh1 RETVAL = isPSXSPC_LC_utf8_safe(s, s + UTF8SKIP(s) + offset); 2313de8cc8edSafresh1 OUTPUT: 2314de8cc8edSafresh1 RETVAL 2315de8cc8edSafresh1 2316de8cc8edSafresh1bool 2317de8cc8edSafresh1isPUNCT_LC_utf8_safe(s, offset) 2318de8cc8edSafresh1 unsigned char * s 2319de8cc8edSafresh1 int offset 2320de8cc8edSafresh1 CODE: 2321de8cc8edSafresh1 RETVAL = isPUNCT_LC_utf8_safe(s, s + UTF8SKIP(s) + offset); 2322de8cc8edSafresh1 OUTPUT: 2323de8cc8edSafresh1 RETVAL 2324de8cc8edSafresh1 2325de8cc8edSafresh1bool 2326de8cc8edSafresh1isSPACE_LC_utf8_safe(s, offset) 2327de8cc8edSafresh1 unsigned char * s 2328de8cc8edSafresh1 int offset 2329de8cc8edSafresh1 CODE: 2330de8cc8edSafresh1 RETVAL = isSPACE_LC_utf8_safe(s, s + UTF8SKIP(s) + offset); 2331de8cc8edSafresh1 OUTPUT: 2332de8cc8edSafresh1 RETVAL 2333de8cc8edSafresh1 2334de8cc8edSafresh1bool 2335de8cc8edSafresh1isUPPER_LC_utf8_safe(s, offset) 2336de8cc8edSafresh1 unsigned char * s 2337de8cc8edSafresh1 int offset 2338de8cc8edSafresh1 CODE: 2339de8cc8edSafresh1 RETVAL = isUPPER_LC_utf8_safe(s, s + UTF8SKIP(s) + offset); 2340de8cc8edSafresh1 OUTPUT: 2341de8cc8edSafresh1 RETVAL 2342de8cc8edSafresh1 2343de8cc8edSafresh1bool 2344de8cc8edSafresh1isWORDCHAR_LC_utf8_safe(s, offset) 2345de8cc8edSafresh1 unsigned char * s 2346de8cc8edSafresh1 int offset 2347de8cc8edSafresh1 CODE: 2348de8cc8edSafresh1 RETVAL = isWORDCHAR_LC_utf8_safe(s, s + UTF8SKIP(s) + offset); 2349de8cc8edSafresh1 OUTPUT: 2350de8cc8edSafresh1 RETVAL 2351de8cc8edSafresh1 2352de8cc8edSafresh1bool 2353de8cc8edSafresh1isXDIGIT_LC_utf8_safe(s, offset) 2354de8cc8edSafresh1 unsigned char * s 2355de8cc8edSafresh1 int offset 2356de8cc8edSafresh1 CODE: 2357de8cc8edSafresh1 RETVAL = isXDIGIT_LC_utf8_safe(s, s + UTF8SKIP(s) + offset); 2358de8cc8edSafresh1 OUTPUT: 2359de8cc8edSafresh1 RETVAL 2360de8cc8edSafresh1 2361de8cc8edSafresh1AV * 2362de8cc8edSafresh1toLOWER_utf8_safe(s, offset) 2363de8cc8edSafresh1 unsigned char * s 2364de8cc8edSafresh1 int offset 2365de8cc8edSafresh1 PREINIT: 2366de8cc8edSafresh1 U8 u[UTF8_MAXBYTES+1]; 2367de8cc8edSafresh1 Size_t len; 2368de8cc8edSafresh1 UV ret; 2369de8cc8edSafresh1 SV* utf8; 2370de8cc8edSafresh1 AV * av; 2371de8cc8edSafresh1 CODE: 2372de8cc8edSafresh1 av = newAV(); 2373de8cc8edSafresh1 ret = toLOWER_utf8_safe(s, s + UTF8SKIP(s) + offset, u, &len); 2374de8cc8edSafresh1 av_push(av, newSVuv(ret)); 2375de8cc8edSafresh1 2376de8cc8edSafresh1 utf8 = newSVpvn((char *) u, len); 2377de8cc8edSafresh1 SvUTF8_on(utf8); 2378de8cc8edSafresh1 av_push(av, utf8); 2379de8cc8edSafresh1 2380de8cc8edSafresh1 av_push(av, newSVuv(len)); 2381de8cc8edSafresh1 RETVAL = av; 2382de8cc8edSafresh1 OUTPUT: 2383de8cc8edSafresh1 RETVAL 2384de8cc8edSafresh1 2385de8cc8edSafresh1AV * 2386de8cc8edSafresh1toTITLE_utf8_safe(s, offset) 2387de8cc8edSafresh1 unsigned char * s 2388de8cc8edSafresh1 int offset 2389de8cc8edSafresh1 PREINIT: 2390de8cc8edSafresh1 U8 u[UTF8_MAXBYTES+1]; 2391de8cc8edSafresh1 Size_t len; 2392de8cc8edSafresh1 UV ret; 2393de8cc8edSafresh1 SV* utf8; 2394de8cc8edSafresh1 AV * av; 2395de8cc8edSafresh1 CODE: 2396de8cc8edSafresh1 av = newAV(); 2397de8cc8edSafresh1 ret = toTITLE_utf8_safe(s, s + UTF8SKIP(s) + offset, u, &len); 2398de8cc8edSafresh1 av_push(av, newSVuv(ret)); 2399de8cc8edSafresh1 2400de8cc8edSafresh1 utf8 = newSVpvn((char *) u, len); 2401de8cc8edSafresh1 SvUTF8_on(utf8); 2402de8cc8edSafresh1 av_push(av, utf8); 2403de8cc8edSafresh1 2404de8cc8edSafresh1 av_push(av, newSVuv(len)); 2405de8cc8edSafresh1 RETVAL = av; 2406de8cc8edSafresh1 OUTPUT: 2407de8cc8edSafresh1 RETVAL 2408de8cc8edSafresh1 2409de8cc8edSafresh1AV * 2410de8cc8edSafresh1toUPPER_utf8_safe(s, offset) 2411de8cc8edSafresh1 unsigned char * s 2412de8cc8edSafresh1 int offset 2413de8cc8edSafresh1 PREINIT: 2414de8cc8edSafresh1 U8 u[UTF8_MAXBYTES+1]; 2415de8cc8edSafresh1 Size_t len; 2416de8cc8edSafresh1 UV ret; 2417de8cc8edSafresh1 SV* utf8; 2418de8cc8edSafresh1 AV * av; 2419de8cc8edSafresh1 CODE: 2420de8cc8edSafresh1 av = newAV(); 2421de8cc8edSafresh1 ret = toUPPER_utf8_safe(s, s + UTF8SKIP(s) + offset, u, &len); 2422de8cc8edSafresh1 av_push(av, newSVuv(ret)); 2423de8cc8edSafresh1 2424de8cc8edSafresh1 utf8 = newSVpvn((char *) u, len); 2425de8cc8edSafresh1 SvUTF8_on(utf8); 2426de8cc8edSafresh1 av_push(av, utf8); 2427de8cc8edSafresh1 2428de8cc8edSafresh1 av_push(av, newSVuv(len)); 2429de8cc8edSafresh1 RETVAL = av; 2430de8cc8edSafresh1 OUTPUT: 2431de8cc8edSafresh1 RETVAL 2432de8cc8edSafresh1 2433de8cc8edSafresh1AV * 2434de8cc8edSafresh1toFOLD_utf8_safe(s, offset) 2435de8cc8edSafresh1 unsigned char * s 2436de8cc8edSafresh1 int offset 2437de8cc8edSafresh1 PREINIT: 2438de8cc8edSafresh1 U8 u[UTF8_MAXBYTES+1]; 2439de8cc8edSafresh1 Size_t len; 2440de8cc8edSafresh1 UV ret; 2441de8cc8edSafresh1 SV* utf8; 2442de8cc8edSafresh1 AV * av; 2443de8cc8edSafresh1 CODE: 2444de8cc8edSafresh1 av = newAV(); 2445de8cc8edSafresh1 ret = toFOLD_utf8_safe(s, s + UTF8SKIP(s) + offset, u, &len); 2446de8cc8edSafresh1 av_push(av, newSVuv(ret)); 2447de8cc8edSafresh1 2448de8cc8edSafresh1 utf8 = newSVpvn((char *) u, len); 2449de8cc8edSafresh1 SvUTF8_on(utf8); 2450de8cc8edSafresh1 av_push(av, utf8); 2451de8cc8edSafresh1 2452de8cc8edSafresh1 av_push(av, newSVuv(len)); 2453de8cc8edSafresh1 RETVAL = av; 2454de8cc8edSafresh1 OUTPUT: 2455de8cc8edSafresh1 RETVAL 2456de8cc8edSafresh1 2457de8cc8edSafresh1AV * 2458de8cc8edSafresh1toLOWER_uvchr(c) 2459de8cc8edSafresh1 UV c 2460de8cc8edSafresh1 PREINIT: 2461de8cc8edSafresh1 U8 u[UTF8_MAXBYTES+1]; 2462de8cc8edSafresh1 Size_t len; 2463de8cc8edSafresh1 UV ret; 2464de8cc8edSafresh1 SV* utf8; 2465de8cc8edSafresh1 AV * av; 2466de8cc8edSafresh1 CODE: 2467de8cc8edSafresh1 av = newAV(); 2468de8cc8edSafresh1 ret = toLOWER_uvchr(c, u, &len); 2469de8cc8edSafresh1 av_push(av, newSVuv(ret)); 2470de8cc8edSafresh1 2471de8cc8edSafresh1 utf8 = newSVpvn((char *) u, len); 2472de8cc8edSafresh1 SvUTF8_on(utf8); 2473de8cc8edSafresh1 av_push(av, utf8); 2474de8cc8edSafresh1 2475de8cc8edSafresh1 av_push(av, newSVuv(len)); 2476de8cc8edSafresh1 RETVAL = av; 2477de8cc8edSafresh1 OUTPUT: 2478de8cc8edSafresh1 RETVAL 2479de8cc8edSafresh1 2480de8cc8edSafresh1AV * 2481de8cc8edSafresh1toTITLE_uvchr(c) 2482de8cc8edSafresh1 UV c 2483de8cc8edSafresh1 PREINIT: 2484de8cc8edSafresh1 U8 u[UTF8_MAXBYTES+1]; 2485de8cc8edSafresh1 Size_t len; 2486de8cc8edSafresh1 UV ret; 2487de8cc8edSafresh1 SV* utf8; 2488de8cc8edSafresh1 AV * av; 2489de8cc8edSafresh1 CODE: 2490de8cc8edSafresh1 av = newAV(); 2491de8cc8edSafresh1 ret = toTITLE_uvchr(c, u, &len); 2492de8cc8edSafresh1 av_push(av, newSVuv(ret)); 2493de8cc8edSafresh1 2494de8cc8edSafresh1 utf8 = newSVpvn((char *) u, len); 2495de8cc8edSafresh1 SvUTF8_on(utf8); 2496de8cc8edSafresh1 av_push(av, utf8); 2497de8cc8edSafresh1 2498de8cc8edSafresh1 av_push(av, newSVuv(len)); 2499de8cc8edSafresh1 RETVAL = av; 2500de8cc8edSafresh1 OUTPUT: 2501de8cc8edSafresh1 RETVAL 2502de8cc8edSafresh1 2503de8cc8edSafresh1AV * 2504de8cc8edSafresh1toUPPER_uvchr(c) 2505de8cc8edSafresh1 UV c 2506de8cc8edSafresh1 PREINIT: 2507de8cc8edSafresh1 U8 u[UTF8_MAXBYTES+1]; 2508de8cc8edSafresh1 Size_t len; 2509de8cc8edSafresh1 UV ret; 2510de8cc8edSafresh1 SV* utf8; 2511de8cc8edSafresh1 AV * av; 2512de8cc8edSafresh1 CODE: 2513de8cc8edSafresh1 av = newAV(); 2514de8cc8edSafresh1 ret = toUPPER_uvchr(c, u, &len); 2515de8cc8edSafresh1 av_push(av, newSVuv(ret)); 2516de8cc8edSafresh1 2517de8cc8edSafresh1 utf8 = newSVpvn((char *) u, len); 2518de8cc8edSafresh1 SvUTF8_on(utf8); 2519de8cc8edSafresh1 av_push(av, utf8); 2520de8cc8edSafresh1 2521de8cc8edSafresh1 av_push(av, newSVuv(len)); 2522de8cc8edSafresh1 RETVAL = av; 2523de8cc8edSafresh1 OUTPUT: 2524de8cc8edSafresh1 RETVAL 2525de8cc8edSafresh1 2526de8cc8edSafresh1AV * 2527de8cc8edSafresh1toFOLD_uvchr(c) 2528de8cc8edSafresh1 UV c 2529de8cc8edSafresh1 PREINIT: 2530de8cc8edSafresh1 U8 u[UTF8_MAXBYTES+1]; 2531de8cc8edSafresh1 Size_t len; 2532de8cc8edSafresh1 UV ret; 2533de8cc8edSafresh1 SV* utf8; 2534de8cc8edSafresh1 AV * av; 2535de8cc8edSafresh1 CODE: 2536de8cc8edSafresh1 av = newAV(); 2537de8cc8edSafresh1 ret = toFOLD_uvchr(c, u, &len); 2538de8cc8edSafresh1 av_push(av, newSVuv(ret)); 2539de8cc8edSafresh1 2540de8cc8edSafresh1 utf8 = newSVpvn((char *) u, len); 2541de8cc8edSafresh1 SvUTF8_on(utf8); 2542de8cc8edSafresh1 av_push(av, utf8); 2543de8cc8edSafresh1 2544de8cc8edSafresh1 av_push(av, newSVuv(len)); 2545de8cc8edSafresh1 RETVAL = av; 2546de8cc8edSafresh1 OUTPUT: 2547de8cc8edSafresh1 RETVAL 2548de8cc8edSafresh1 2549de8cc8edSafresh1#endif 2550de8cc8edSafresh1 2551de8cc8edSafresh1UV 2552de8cc8edSafresh1LATIN1_TO_NATIVE(cp) 2553de8cc8edSafresh1 UV cp 2554de8cc8edSafresh1 CODE: 2555de8cc8edSafresh1 if (cp > 255) RETVAL= cp; 2556de8cc8edSafresh1 else RETVAL= LATIN1_TO_NATIVE(cp); 2557de8cc8edSafresh1 OUTPUT: 2558de8cc8edSafresh1 RETVAL 2559de8cc8edSafresh1 2560de8cc8edSafresh1UV 2561de8cc8edSafresh1NATIVE_TO_LATIN1(cp) 2562de8cc8edSafresh1 UV cp 2563de8cc8edSafresh1 CODE: 2564de8cc8edSafresh1 RETVAL= NATIVE_TO_LATIN1(cp); 2565de8cc8edSafresh1 OUTPUT: 2566de8cc8edSafresh1 RETVAL 2567de8cc8edSafresh1 2568f3efcd01Safresh1STRLEN 2569f3efcd01Safresh1av_tindex(av) 2570de8cc8edSafresh1 SV *av 2571f3efcd01Safresh1 CODE: 2572de8cc8edSafresh1 RETVAL = av_tindex((AV*)SvRV(av)); 2573f3efcd01Safresh1 OUTPUT: 2574f3efcd01Safresh1 RETVAL 2575f3efcd01Safresh1 2576f3efcd01Safresh1STRLEN 2577f3efcd01Safresh1av_top_index(av) 2578de8cc8edSafresh1 SV *av 2579f3efcd01Safresh1 CODE: 2580de8cc8edSafresh1 RETVAL = av_top_index((AV*)SvRV(av)); 2581f3efcd01Safresh1 OUTPUT: 2582f3efcd01Safresh1 RETVAL 2583f3efcd01Safresh1 25849a4edab6SbluhmSTRLEN 25859a4edab6Sbluhmav_count(av) 25869a4edab6Sbluhm SV *av 25879a4edab6Sbluhm CODE: 25889a4edab6Sbluhm RETVAL = av_count((AV*)SvRV(av)); 25899a4edab6Sbluhm OUTPUT: 25909a4edab6Sbluhm RETVAL 25919a4edab6Sbluhm 2592*3d61058aSafresh1STRLEN 2593*3d61058aSafresh1mark_size_ok() 2594*3d61058aSafresh1 CODE: 2595*3d61058aSafresh1 RETVAL = sizeof(*PL_markstack_ptr) == sizeof(Stack_off_t); 2596*3d61058aSafresh1 OUTPUT: 2597*3d61058aSafresh1 RETVAL 2598*3d61058aSafresh1 2599*3d61058aSafresh1UV 2600*3d61058aSafresh1mark_max() 2601*3d61058aSafresh1 CODE: 2602*3d61058aSafresh1 RETVAL = Stack_off_t_MAX; 2603*3d61058aSafresh1 OUTPUT: 2604*3d61058aSafresh1 RETVAL 2605*3d61058aSafresh1 2606*3d61058aSafresh1=tests plan => 26829 26075759b3d2Safresh1 26085759b3d2Safresh1use vars qw($my_sv @my_av %my_hv); 26095759b3d2Safresh1 2610de8cc8edSafresh1ok(&Devel::PPPort::boolSV(1), "Verify boolSV(1) is true"); 2611de8cc8edSafresh1ok(!&Devel::PPPort::boolSV(0), "Verify boolSV(0) is false"); 26125759b3d2Safresh1 26135759b3d2Safresh1$_ = "Fred"; 2614de8cc8edSafresh1is(&Devel::PPPort::DEFSV(), "Fred", '$_ is FRED; Verify DEFSV is FRED'); 2615de8cc8edSafresh1is(&Devel::PPPort::UNDERBAR(), "Fred", 'And verify UNDERBAR is FRED'); 26165759b3d2Safresh1 2617de8cc8edSafresh1if (ivers($]) >= ivers(5.9.2) && ivers($]) < ivers(5.23)) { 26185759b3d2Safresh1 eval q{ 26195759b3d2Safresh1 no warnings "deprecated"; 2620de8cc8edSafresh1 no if $^V >= v5.17.9, warnings => "experimental::lexical_topic"; 26215759b3d2Safresh1 my $_ = "Tony"; 2622de8cc8edSafresh1 is(&Devel::PPPort::DEFSV(), "Fred", 'lexical_topic eval: $_ is Tony; Verify DEFSV is Fred'); 2623de8cc8edSafresh1 is(&Devel::PPPort::UNDERBAR(), "Tony", 'And verify UNDERBAR is Tony'); 26245759b3d2Safresh1 }; 2625de8cc8edSafresh1 die __FILE__ . __LINE__ . ": $@" if $@; 26265759b3d2Safresh1} 26275759b3d2Safresh1else { 2628de8cc8edSafresh1 skip("perl version outside testing range of lexical_topic", 2); 26295759b3d2Safresh1} 26305759b3d2Safresh1 26315759b3d2Safresh1my @r = &Devel::PPPort::DEFSV_modify(); 26325759b3d2Safresh1 2633de8cc8edSafresh1ok(@r == 3, "Verify got 3 elements"); 2634de8cc8edSafresh1is($r[0], 'Fred'); 2635de8cc8edSafresh1is($r[1], 'DEFSV'); 2636de8cc8edSafresh1is($r[2], 'Fred'); 26375759b3d2Safresh1 2638de8cc8edSafresh1is(&Devel::PPPort::DEFSV(), "Fred"); 26395759b3d2Safresh1 26405759b3d2Safresh1eval { 1 }; 2641de8cc8edSafresh1ok(!&Devel::PPPort::ERRSV(), "Verify ERRSV on true is false"); 26425759b3d2Safresh1eval { cannot_call_this_one() }; 2643de8cc8edSafresh1ok(&Devel::PPPort::ERRSV(), "Verify ERRSV on false is true"); 26445759b3d2Safresh1 26455759b3d2Safresh1ok(&Devel::PPPort::gv_stashpvn('Devel::PPPort', 0)); 26465759b3d2Safresh1ok(!&Devel::PPPort::gv_stashpvn('does::not::exist', 0)); 26475759b3d2Safresh1ok(&Devel::PPPort::gv_stashpvn('does::not::exist', 1)); 26485759b3d2Safresh1 26495759b3d2Safresh1$my_sv = 1; 26505759b3d2Safresh1ok(&Devel::PPPort::get_sv('my_sv', 0)); 26515759b3d2Safresh1ok(!&Devel::PPPort::get_sv('not_my_sv', 0)); 26525759b3d2Safresh1ok(&Devel::PPPort::get_sv('not_my_sv', 1)); 26535759b3d2Safresh1 26545759b3d2Safresh1@my_av = (1); 26555759b3d2Safresh1ok(&Devel::PPPort::get_av('my_av', 0)); 26565759b3d2Safresh1ok(!&Devel::PPPort::get_av('not_my_av', 0)); 26575759b3d2Safresh1ok(&Devel::PPPort::get_av('not_my_av', 1)); 26585759b3d2Safresh1 26595759b3d2Safresh1%my_hv = (a=>1); 26605759b3d2Safresh1ok(&Devel::PPPort::get_hv('my_hv', 0)); 26615759b3d2Safresh1ok(!&Devel::PPPort::get_hv('not_my_hv', 0)); 26625759b3d2Safresh1ok(&Devel::PPPort::get_hv('not_my_hv', 1)); 26635759b3d2Safresh1 26645759b3d2Safresh1sub my_cv { 1 }; 26655759b3d2Safresh1ok(&Devel::PPPort::get_cv('my_cv', 0)); 26665759b3d2Safresh1ok(!&Devel::PPPort::get_cv('not_my_cv', 0)); 26675759b3d2Safresh1ok(&Devel::PPPort::get_cv('not_my_cv', 1)); 26685759b3d2Safresh1 2669de8cc8edSafresh1is(Devel::PPPort::dXSTARG(42), 43); 2670de8cc8edSafresh1is(Devel::PPPort::dAXMARK(4711), 4710); 26715759b3d2Safresh1 2672de8cc8edSafresh1is(Devel::PPPort::prepush(), 42); 26735759b3d2Safresh1 2674de8cc8edSafresh1is(join(':', Devel::PPPort::xsreturn(0)), 'test1'); 2675de8cc8edSafresh1is(join(':', Devel::PPPort::xsreturn(1)), 'test1:test2'); 26765759b3d2Safresh1 2677de8cc8edSafresh1is(Devel::PPPort::PERL_ABS(42), 42, "Verify PERL_ABS(42) is 42"); 2678de8cc8edSafresh1is(Devel::PPPort::PERL_ABS(-13), 13, "Verify PERL_ABS(-13) is 13"); 26795759b3d2Safresh1 2680de8cc8edSafresh1is(Devel::PPPort::SVf(42), ivers($]) >= ivers(5.4) ? '[42]' : '42'); 2681de8cc8edSafresh1is(Devel::PPPort::SVf('abc'), ivers($]) >= ivers(5.4) ? '[abc]' : 'abc'); 26825759b3d2Safresh1 2683de8cc8edSafresh1is(&Devel::PPPort::Perl_ppaddr_t("FOO"), "foo"); 26845759b3d2Safresh1 2685de8cc8edSafresh1is(&Devel::PPPort::ptrtests(), 63); 26865759b3d2Safresh1 2687de8cc8edSafresh1is(&Devel::PPPort::OpSIBLING_tests(), 0); 26885759b3d2Safresh1 2689de8cc8edSafresh1if (ivers($]) >= ivers(5.9)) { 26905759b3d2Safresh1 eval q{ 2691de8cc8edSafresh1 is(&Devel::PPPort::check_HeUTF8("hello"), "norm"); 2692de8cc8edSafresh1 is(&Devel::PPPort::check_HeUTF8("\N{U+263a}"), "utf8"); 26935759b3d2Safresh1 }; 26945759b3d2Safresh1} else { 2695de8cc8edSafresh1 skip("Too early perl version", 2); 26965759b3d2Safresh1} 26975759b3d2Safresh1 26985759b3d2Safresh1@r = &Devel::PPPort::check_c_array(); 2699de8cc8edSafresh1is($r[0], 4); 2700de8cc8edSafresh1is($r[1], "13"); 27015759b3d2Safresh1 27025759b3d2Safresh1ok(!Devel::PPPort::SvRXOK("")); 27035759b3d2Safresh1ok(!Devel::PPPort::SvRXOK(bless [], "Regexp")); 27045759b3d2Safresh1 2705de8cc8edSafresh1if (ivers($]) < ivers(5.5)) { 2706de8cc8edSafresh1 skip 'no qr// objects in this perl', 2; 27075759b3d2Safresh1} else { 27085759b3d2Safresh1 my $qr = eval 'qr/./'; 2709de8cc8edSafresh1 ok(Devel::PPPort::SvRXOK($qr), "SVRXOK(qr) is true"); 27105759b3d2Safresh1 ok(Devel::PPPort::SvRXOK(bless $qr, "Surprise")); 27115759b3d2Safresh1} 2712f3efcd01Safresh1 2713de8cc8edSafresh1ok( Devel::PPPort::NATIVE_TO_LATIN1(0xB6) == 0xB6); 2714de8cc8edSafresh1ok( Devel::PPPort::NATIVE_TO_LATIN1(0x1) == 0x1); 2715de8cc8edSafresh1ok( Devel::PPPort::NATIVE_TO_LATIN1(ord("A")) == 0x41); 2716de8cc8edSafresh1ok( Devel::PPPort::NATIVE_TO_LATIN1(ord("0")) == 0x30); 2717f3efcd01Safresh1 2718de8cc8edSafresh1ok( Devel::PPPort::LATIN1_TO_NATIVE(0xB6) == 0xB6, "Verify LATIN1_TO_NATIVE(0xB6) is 0xB6"); 2719de8cc8edSafresh1if (ord("A") == 65) { 2720de8cc8edSafresh1 ok( Devel::PPPort::LATIN1_TO_NATIVE(0x41) == 0x41); 2721de8cc8edSafresh1 ok( Devel::PPPort::LATIN1_TO_NATIVE(0x30) == 0x30); 2722de8cc8edSafresh1} 2723de8cc8edSafresh1else { 2724de8cc8edSafresh1 ok( Devel::PPPort::LATIN1_TO_NATIVE(0x41) == 0xC1); 2725de8cc8edSafresh1 ok( Devel::PPPort::LATIN1_TO_NATIVE(0x30) == 0xF0); 2726de8cc8edSafresh1} 2727f3efcd01Safresh1 2728de8cc8edSafresh1ok( Devel::PPPort::isALNUMC_L1(ord("5"))); 2729de8cc8edSafresh1ok( Devel::PPPort::isALNUMC_L1(0xFC)); 2730de8cc8edSafresh1ok(! Devel::PPPort::isALNUMC_L1(0xB6)); 2731f3efcd01Safresh1 2732de8cc8edSafresh1ok( Devel::PPPort::isOCTAL(ord("7")), "Verify '7' is OCTAL"); 2733de8cc8edSafresh1ok(! Devel::PPPort::isOCTAL(ord("8")), "Verify '8' isn't OCTAL"); 2734f3efcd01Safresh1 2735de8cc8edSafresh1ok( Devel::PPPort::isOCTAL_A(ord("0")), "Verify '0' is OCTAL_A"); 2736de8cc8edSafresh1ok(! Devel::PPPort::isOCTAL_A(ord("9")), "Verify '9' isn't OCTAL_A"); 2737f3efcd01Safresh1 2738de8cc8edSafresh1ok( Devel::PPPort::isOCTAL_L1(ord("2")), "Verify '2' is OCTAL_L1"); 2739de8cc8edSafresh1ok(! Devel::PPPort::isOCTAL_L1(ord("8")), "Verify '8' isn't OCTAL_L1"); 2740f3efcd01Safresh1 2741de8cc8edSafresh1my $way_too_early_msg = 'UTF-8 not implemented on this perl'; 2742f3efcd01Safresh1 2743de8cc8edSafresh1# For the other properties, we test every code point from 0.255, and a 2744de8cc8edSafresh1# smattering of higher ones. First populate a hash with keys like '65:ALPHA' 2745de8cc8edSafresh1# to indicate that the code point there is alphabetic 2746de8cc8edSafresh1my $i; 2747de8cc8edSafresh1my %types; 2748de8cc8edSafresh1for $i (0x41..0x5A, 0x61..0x7A, 0xAA, 0xB5, 0xBA, 0xC0..0xD6, 0xD8..0xF6, 2749de8cc8edSafresh1 0xF8..0x101) 2750de8cc8edSafresh1{ 2751de8cc8edSafresh1 my $native = Devel::PPPort::LATIN1_TO_NATIVE($i); 2752de8cc8edSafresh1 $types{"$native:ALPHA"} = 1; 2753de8cc8edSafresh1 $types{"$native:ALPHANUMERIC"} = 1; 2754de8cc8edSafresh1 $types{"$native:IDFIRST"} = 1; 2755de8cc8edSafresh1 $types{"$native:IDCONT"} = 1; 2756de8cc8edSafresh1 $types{"$native:PRINT"} = 1; 2757de8cc8edSafresh1 $types{"$native:WORDCHAR"} = 1; 2758de8cc8edSafresh1} 2759de8cc8edSafresh1for $i (0x30..0x39, 0x660, 0xFF19) { 2760de8cc8edSafresh1 my $native = Devel::PPPort::LATIN1_TO_NATIVE($i); 2761de8cc8edSafresh1 $types{"$native:ALPHANUMERIC"} = 1; 2762de8cc8edSafresh1 $types{"$native:DIGIT"} = 1; 2763de8cc8edSafresh1 $types{"$native:IDCONT"} = 1; 2764de8cc8edSafresh1 $types{"$native:WORDCHAR"} = 1; 2765de8cc8edSafresh1 $types{"$native:GRAPH"} = 1; 2766de8cc8edSafresh1 $types{"$native:PRINT"} = 1; 2767de8cc8edSafresh1 $types{"$native:XDIGIT"} = 1 if $i < 255 || ($i >= 0xFF10 && $i <= 0xFF19); 2768de8cc8edSafresh1} 2769f3efcd01Safresh1 2770de8cc8edSafresh1for $i (0..0x7F) { 2771de8cc8edSafresh1 my $native = Devel::PPPort::LATIN1_TO_NATIVE($i); 2772de8cc8edSafresh1 $types{"$native:ASCII"} = 1; 2773de8cc8edSafresh1} 2774de8cc8edSafresh1for $i (0..0x1f, 0x7F..0x9F) { 2775de8cc8edSafresh1 my $native = Devel::PPPort::LATIN1_TO_NATIVE($i); 2776de8cc8edSafresh1 $types{"$native:CNTRL"} = 1; 2777de8cc8edSafresh1} 2778de8cc8edSafresh1for $i (0x21..0x7E, 0xA1..0x101, 0x660) { 2779de8cc8edSafresh1 my $native = Devel::PPPort::LATIN1_TO_NATIVE($i); 2780de8cc8edSafresh1 $types{"$native:GRAPH"} = 1; 2781de8cc8edSafresh1 $types{"$native:PRINT"} = 1; 2782de8cc8edSafresh1} 2783de8cc8edSafresh1for $i (0x09, 0x20, 0xA0) { 2784de8cc8edSafresh1 my $native = Devel::PPPort::LATIN1_TO_NATIVE($i); 2785de8cc8edSafresh1 $types{"$native:BLANK"} = 1; 2786de8cc8edSafresh1 $types{"$native:SPACE"} = 1; 2787de8cc8edSafresh1 $types{"$native:PSXSPC"} = 1; 2788de8cc8edSafresh1 $types{"$native:PRINT"} = 1 if $i > 0x09; 2789de8cc8edSafresh1} 2790de8cc8edSafresh1for $i (0x09..0x0D, 0x85, 0x2029) { 2791de8cc8edSafresh1 my $native = Devel::PPPort::LATIN1_TO_NATIVE($i); 2792de8cc8edSafresh1 $types{"$native:SPACE"} = 1; 2793de8cc8edSafresh1 $types{"$native:PSXSPC"} = 1; 2794de8cc8edSafresh1} 2795de8cc8edSafresh1for $i (0x41..0x5A, 0xC0..0xD6, 0xD8..0xDE, 0x100) { 2796de8cc8edSafresh1 my $native = Devel::PPPort::LATIN1_TO_NATIVE($i); 2797de8cc8edSafresh1 $types{"$native:UPPER"} = 1; 2798de8cc8edSafresh1 $types{"$native:XDIGIT"} = 1 if $i < 0x47; 2799de8cc8edSafresh1} 2800de8cc8edSafresh1for $i (0x61..0x7A, 0xAA, 0xB5, 0xBA, 0xDF..0xF6, 0xF8..0xFF, 0x101) { 2801de8cc8edSafresh1 my $native = Devel::PPPort::LATIN1_TO_NATIVE($i); 2802de8cc8edSafresh1 $types{"$native:LOWER"} = 1; 2803de8cc8edSafresh1 $types{"$native:XDIGIT"} = 1 if $i < 0x67; 2804de8cc8edSafresh1} 2805de8cc8edSafresh1for $i (0x21..0x2F, 0x3A..0x40, 0x5B..0x60, 0x7B..0x7E, 0xB6, 0xA1, 0xA7, 0xAB, 2806de8cc8edSafresh1 0xB7, 0xBB, 0xBF, 0x5BE) 2807de8cc8edSafresh1{ 2808de8cc8edSafresh1 my $native = Devel::PPPort::LATIN1_TO_NATIVE($i); 2809de8cc8edSafresh1 $types{"$native:PUNCT"} = 1; 2810de8cc8edSafresh1 $types{"$native:GRAPH"} = 1; 2811de8cc8edSafresh1 $types{"$native:PRINT"} = 1; 2812de8cc8edSafresh1} 2813f3efcd01Safresh1 2814de8cc8edSafresh1$i = ord('_'); 2815de8cc8edSafresh1$types{"$i:WORDCHAR"} = 1; 2816de8cc8edSafresh1$types{"$i:IDFIRST"} = 1; 2817de8cc8edSafresh1$types{"$i:IDCONT"} = 1; 2818f3efcd01Safresh1 2819de8cc8edSafresh1# Now find all the unique code points included above. 2820de8cc8edSafresh1my %code_points_to_test; 2821de8cc8edSafresh1my $key; 2822de8cc8edSafresh1for $key (keys %types) { 2823de8cc8edSafresh1 $key =~ s/:.*//; 2824de8cc8edSafresh1 $code_points_to_test{$key} = 1; 2825de8cc8edSafresh1} 2826f3efcd01Safresh1 2827de8cc8edSafresh1# And test each one 2828de8cc8edSafresh1for $i (sort { $a <=> $b } keys %code_points_to_test) { 2829de8cc8edSafresh1 my $native = Devel::PPPort::LATIN1_TO_NATIVE($i); 2830de8cc8edSafresh1 my $hex = sprintf("0x%02X", $native); 2831f3efcd01Safresh1 2832de8cc8edSafresh1 # And for each code point test each of the classes 2833de8cc8edSafresh1 my $class; 2834de8cc8edSafresh1 for $class (qw(ALPHA ALPHANUMERIC ASCII BLANK CNTRL DIGIT GRAPH IDCONT 2835de8cc8edSafresh1 IDFIRST LOWER PRINT PSXSPC PUNCT SPACE UPPER WORDCHAR 2836de8cc8edSafresh1 XDIGIT)) 2837de8cc8edSafresh1 { 2838de8cc8edSafresh1 if ($i < 256) { # For the ones that can fit in a byte, test each of 2839de8cc8edSafresh1 # three macros. 2840de8cc8edSafresh1 my $suffix; 2841de8cc8edSafresh1 for $suffix ("", "_A", "_L1", "_uvchr") { 2842de8cc8edSafresh1 my $should_be = ($i > 0x7F && $suffix !~ /_(uvchr|L1)/) 2843de8cc8edSafresh1 ? 0 # Fail on non-ASCII unless unicode 2844de8cc8edSafresh1 : ($types{"$native:$class"} || 0); 2845de8cc8edSafresh1 if (ivers($]) < ivers(5.6) && $suffix eq '_uvchr') { 2846de8cc8edSafresh1 skip("No UTF-8 on this perl", 1); 2847de8cc8edSafresh1 next; 2848de8cc8edSafresh1 } 2849f3efcd01Safresh1 2850de8cc8edSafresh1 my $eval_string = "Devel::PPPort::is${class}$suffix($hex)"; 2851de8cc8edSafresh1 local $SIG{__WARN__} = sub {}; 2852de8cc8edSafresh1 my $is = eval $eval_string || 0; 2853de8cc8edSafresh1 die "eval 'For $i: $eval_string' gave $@" if $@; 2854de8cc8edSafresh1 is($is, $should_be, "'$eval_string'"); 2855de8cc8edSafresh1 } 2856de8cc8edSafresh1 } 2857f3efcd01Safresh1 2858de8cc8edSafresh1 # For all code points, test the '_utf8' macros 2859de8cc8edSafresh1 my $sub_fcn; 2860de8cc8edSafresh1 for $sub_fcn ("", "_LC") { 2861de8cc8edSafresh1 my $skip = ""; 2862de8cc8edSafresh1 if (ivers($]) < ivers(5.6)) { 2863de8cc8edSafresh1 $skip = $way_too_early_msg; 2864de8cc8edSafresh1 } 2865de8cc8edSafresh1 elsif (ivers($]) < ivers(5.7) && $native > 255) { 2866de8cc8edSafresh1 $skip = "Perls earlier than 5.7 give wrong answers for above Latin1 code points"; 2867de8cc8edSafresh1 } 2868de8cc8edSafresh1 elsif (ivers($]) <= ivers(5.11.3) && $native == 0x2029 && ($class eq 'PRINT' || $class eq 'GRAPH')) { 2869de8cc8edSafresh1 $skip = "Perls earlier than 5.11.3 considered high space characters as isPRINT and isGRAPH"; 2870de8cc8edSafresh1 } 2871de8cc8edSafresh1 elsif ($sub_fcn eq '_LC' && $i < 256) { 2872de8cc8edSafresh1 $skip = "Testing of code points whose results depend on locale is skipped "; 2873de8cc8edSafresh1 } 2874de8cc8edSafresh1 my $fcn = "Devel::PPPort::is${class}${sub_fcn}_utf8_safe"; 2875de8cc8edSafresh1 my $utf8; 2876f3efcd01Safresh1 2877de8cc8edSafresh1 if ($skip) { 2878de8cc8edSafresh1 skip $skip, 1; 2879de8cc8edSafresh1 } 2880de8cc8edSafresh1 else { 2881de8cc8edSafresh1 $utf8 = quotemeta Devel::PPPort::uvchr_to_utf8($native); 2882de8cc8edSafresh1 my $should_be = $types{"$native:$class"} || 0; 2883de8cc8edSafresh1 my $eval_string = "$fcn(\"$utf8\", 0)"; 2884de8cc8edSafresh1 local $SIG{__WARN__} = sub {}; 2885de8cc8edSafresh1 my $is = eval $eval_string || 0; 2886de8cc8edSafresh1 die "eval 'For $i, $eval_string' gave $@" if $@; 2887de8cc8edSafresh1 is($is, $should_be, sprintf("For U+%04X '%s'", $native, $eval_string)); 2888de8cc8edSafresh1 } 2889f3efcd01Safresh1 2890de8cc8edSafresh1 # And for the high code points, test that a too short malformation (the 2891de8cc8edSafresh1 # -1) causes it to fail 2892de8cc8edSafresh1 if ($i > 255) { 2893de8cc8edSafresh1 if ($skip) { 2894de8cc8edSafresh1 skip $skip, 1; 2895de8cc8edSafresh1 } 2896de8cc8edSafresh1 elsif (ivers($]) >= ivers(5.25.9)) { 2897de8cc8edSafresh1 skip("Prints an annoying error message that khw doesn't know how to easily suppress", 1); 2898de8cc8edSafresh1 } 2899de8cc8edSafresh1 else { 2900de8cc8edSafresh1 my $eval_string = "$fcn(\"$utf8\", -1)"; 2901de8cc8edSafresh1 local $SIG{__WARN__} = sub {}; 2902de8cc8edSafresh1 my $is = eval "$eval_string" || 0; 2903de8cc8edSafresh1 die "eval '$eval_string' gave $@" if $@; 2904de8cc8edSafresh1 is($is, 0, sprintf("For U+%04X '%s'", $native, $eval_string)); 2905de8cc8edSafresh1 } 2906de8cc8edSafresh1 } 2907de8cc8edSafresh1 } 2908de8cc8edSafresh1 } 2909de8cc8edSafresh1} 2910f3efcd01Safresh1 2911de8cc8edSafresh1my %case_changing = ( 'LOWER' => [ [ ord('A'), ord('a') ], 2912de8cc8edSafresh1 [ Devel::PPPort::LATIN1_TO_NATIVE(0xC0), 2913de8cc8edSafresh1 Devel::PPPort::LATIN1_TO_NATIVE(0xE0) ], 2914de8cc8edSafresh1 [ 0x100, 0x101 ], 2915de8cc8edSafresh1 ], 2916de8cc8edSafresh1 'FOLD' => [ [ ord('C'), ord('c') ], 2917de8cc8edSafresh1 [ Devel::PPPort::LATIN1_TO_NATIVE(0xC0), 2918de8cc8edSafresh1 Devel::PPPort::LATIN1_TO_NATIVE(0xE0) ], 2919de8cc8edSafresh1 [ 0x104, 0x105 ], 2920de8cc8edSafresh1 [ Devel::PPPort::LATIN1_TO_NATIVE(0xDF), 2921de8cc8edSafresh1 'ss' ], 2922de8cc8edSafresh1 ], 2923de8cc8edSafresh1 'UPPER' => [ [ ord('a'), ord('A'), ], 2924de8cc8edSafresh1 [ Devel::PPPort::LATIN1_TO_NATIVE(0xE0), 2925de8cc8edSafresh1 Devel::PPPort::LATIN1_TO_NATIVE(0xC0) ], 2926de8cc8edSafresh1 [ 0x101, 0x100 ], 2927de8cc8edSafresh1 [ Devel::PPPort::LATIN1_TO_NATIVE(0xDF), 2928de8cc8edSafresh1 'SS' ], 2929de8cc8edSafresh1 ], 2930de8cc8edSafresh1 'TITLE' => [ [ ord('c'), ord('C'), ], 2931de8cc8edSafresh1 [ Devel::PPPort::LATIN1_TO_NATIVE(0xE2), 2932de8cc8edSafresh1 Devel::PPPort::LATIN1_TO_NATIVE(0xC2) ], 2933de8cc8edSafresh1 [ 0x103, 0x102 ], 2934de8cc8edSafresh1 [ Devel::PPPort::LATIN1_TO_NATIVE(0xDF), 2935de8cc8edSafresh1 'Ss' ], 2936de8cc8edSafresh1 ], 2937de8cc8edSafresh1 ); 2938f3efcd01Safresh1 2939de8cc8edSafresh1my $name; 2940de8cc8edSafresh1for $name (keys %case_changing) { 2941de8cc8edSafresh1 my @code_points_to_test = @{$case_changing{$name}}; 2942de8cc8edSafresh1 my $unchanged; 2943de8cc8edSafresh1 for $unchanged (@code_points_to_test) { 2944de8cc8edSafresh1 my @pair = @$unchanged; 2945de8cc8edSafresh1 my $original = $pair[0]; 2946de8cc8edSafresh1 my $changed = $pair[1]; 2947de8cc8edSafresh1 my $utf8_changed = $changed; 2948de8cc8edSafresh1 my $is_cp = $utf8_changed =~ /^\d+$/; 2949de8cc8edSafresh1 my $should_be_bytes; 2950de8cc8edSafresh1 if (ivers($]) >= ivers(5.6)) { 2951de8cc8edSafresh1 if ($is_cp) { 2952de8cc8edSafresh1 $utf8_changed = Devel::PPPort::uvchr_to_utf8($changed); 2953de8cc8edSafresh1 $should_be_bytes = Devel::PPPort::UTF8_SAFE_SKIP($utf8_changed, 0); 2954de8cc8edSafresh1 } 2955de8cc8edSafresh1 else { 2956de8cc8edSafresh1 die("Test currently doesn't work for non-ASCII multi-char case changes") if eval '$utf8_changed =~ /[[:^ascii:]]/'; 2957de8cc8edSafresh1 $should_be_bytes = length $utf8_changed; 2958de8cc8edSafresh1 } 2959de8cc8edSafresh1 } 2960f3efcd01Safresh1 2961de8cc8edSafresh1 my $fcn = "to${name}_uvchr"; 2962de8cc8edSafresh1 my $skip = ""; 2963f3efcd01Safresh1 2964de8cc8edSafresh1 if (ivers($]) < ivers(5.6)) { 2965de8cc8edSafresh1 $skip = $way_too_early_msg; 2966de8cc8edSafresh1 } 2967de8cc8edSafresh1 elsif (! $is_cp) { 2968de8cc8edSafresh1 $skip = "Can't do uvchr on a multi-char string"; 2969de8cc8edSafresh1 } 2970de8cc8edSafresh1 if ($skip) { 2971de8cc8edSafresh1 skip $skip, 4; 2972de8cc8edSafresh1 } 2973de8cc8edSafresh1 else { 2974de8cc8edSafresh1 if ($is_cp) { 2975de8cc8edSafresh1 $utf8_changed = Devel::PPPort::uvchr_to_utf8($changed); 2976de8cc8edSafresh1 $should_be_bytes = Devel::PPPort::UTF8_SAFE_SKIP($utf8_changed, 0); 2977de8cc8edSafresh1 } 2978de8cc8edSafresh1 else { 2979de8cc8edSafresh1 my $non_ascii_re = (ivers($]) >= ivers(5.6)) ? '[[:^ascii:]]' : '[^\x00-\x7F]'; 2980de8cc8edSafresh1 die("Test currently doesn't work for non-ASCII multi-char case changes") if eval '$utf8_changed =~ /$non_ascii_re/'; 2981de8cc8edSafresh1 $should_be_bytes = length $utf8_changed; 2982de8cc8edSafresh1 } 2983f3efcd01Safresh1 2984de8cc8edSafresh1 my $ret = eval "Devel::PPPort::$fcn($original)"; 2985de8cc8edSafresh1 my $fail = $@; # Have to save $@, as it gets destroyed 2986de8cc8edSafresh1 is ($fail, "", "$fcn($original) didn't fail"); 2987de8cc8edSafresh1 my $first = (ivers($]) != ivers(5.6)) 2988de8cc8edSafresh1 ? substr($utf8_changed, 0, 1) 2989de8cc8edSafresh1 : $utf8_changed, 0, 1; 2990de8cc8edSafresh1 is($ret->[0], ord $first, 2991de8cc8edSafresh1 "ord of $fcn($original) is $changed"); 2992de8cc8edSafresh1 is($ret->[1], $utf8_changed, 2993de8cc8edSafresh1 "UTF-8 of of $fcn($original) is correct"); 2994de8cc8edSafresh1 is($ret->[2], $should_be_bytes, 2995de8cc8edSafresh1 "Length of $fcn($original) is $should_be_bytes"); 2996de8cc8edSafresh1 } 2997f3efcd01Safresh1 2998de8cc8edSafresh1 my $truncate; 2999de8cc8edSafresh1 for $truncate (0..2) { 3000de8cc8edSafresh1 my $skip; 3001de8cc8edSafresh1 if (ivers($]) < ivers(5.6)) { 3002de8cc8edSafresh1 $skip = $way_too_early_msg; 3003de8cc8edSafresh1 } 3004de8cc8edSafresh1 elsif (! $is_cp && ivers($]) < ivers(5.7.3)) { 3005de8cc8edSafresh1 $skip = "Multi-character case change not implemented until 5.7.3"; 3006de8cc8edSafresh1 } 3007de8cc8edSafresh1 elsif ($truncate == 2 && ivers($]) > ivers(5.25.8)) { 3008de8cc8edSafresh1 $skip = "Zero length inputs cause assertion failure; test dies in modern perls"; 3009de8cc8edSafresh1 } 3010de8cc8edSafresh1 elsif ($truncate > 0 && length $changed > 1) { 3011de8cc8edSafresh1 $skip = "Don't test shortened multi-char case changes"; 3012de8cc8edSafresh1 } 3013de8cc8edSafresh1 elsif ($truncate > 0 && Devel::PPPort::UVCHR_IS_INVARIANT($original)) { 3014de8cc8edSafresh1 $skip = "Don't try to test shortened single bytes"; 3015de8cc8edSafresh1 } 3016de8cc8edSafresh1 if ($skip) { 3017de8cc8edSafresh1 skip $skip, 4; 3018de8cc8edSafresh1 } 3019de8cc8edSafresh1 else { 3020de8cc8edSafresh1 my $fcn = "to${name}_utf8_safe"; 3021de8cc8edSafresh1 my $utf8 = quotemeta Devel::PPPort::uvchr_to_utf8($original); 3022de8cc8edSafresh1 my $real_truncate = ($truncate < 2) 3023de8cc8edSafresh1 ? $truncate : $should_be_bytes; 3024de8cc8edSafresh1 my $eval_string = "Devel::PPPort::$fcn(\"$utf8\", $real_truncate)"; 3025de8cc8edSafresh1 my $ret = eval "no warnings; $eval_string" || 0; 3026de8cc8edSafresh1 my $fail = $@; # Have to save $@, as it gets destroyed 3027de8cc8edSafresh1 if ($truncate == 0) { 3028de8cc8edSafresh1 is ($fail, "", "Didn't fail on full length input"); 3029de8cc8edSafresh1 my $first = (ivers($]) != ivers(5.6)) 3030de8cc8edSafresh1 ? substr($utf8_changed, 0, 1) 3031de8cc8edSafresh1 : $utf8_changed, 0, 1; 3032de8cc8edSafresh1 is($ret->[0], ord $first, 3033de8cc8edSafresh1 "ord of $fcn($original) is $changed"); 3034de8cc8edSafresh1 is($ret->[1], $utf8_changed, 3035de8cc8edSafresh1 "UTF-8 of of $fcn($original) is correct"); 3036de8cc8edSafresh1 is($ret->[2], $should_be_bytes, 3037de8cc8edSafresh1 "Length of $fcn($original) is $should_be_bytes"); 3038de8cc8edSafresh1 } 3039de8cc8edSafresh1 else { 3040de8cc8edSafresh1 is ($fail, eval 'qr/Malformed UTF-8 character/', 3041de8cc8edSafresh1 "Gave appropriate error for short char: $original"); 3042de8cc8edSafresh1 skip("Expected failure means remaining tests for" 3043de8cc8edSafresh1 . " this aren't relevant", 3); 3044de8cc8edSafresh1 } 3045de8cc8edSafresh1 } 3046de8cc8edSafresh1 } 3047de8cc8edSafresh1 } 3048de8cc8edSafresh1} 3049f3efcd01Safresh1 3050de8cc8edSafresh1is(&Devel::PPPort::av_top_index([1,2,3]), 2); 3051de8cc8edSafresh1is(&Devel::PPPort::av_tindex([1,2,3,4]), 3); 30529a4edab6Sbluhmis(&Devel::PPPort::av_count([1,2,3,4]), 4); 3053*3d61058aSafresh1 3054*3d61058aSafresh1ok(&Devel::PPPort::mark_size_ok(), "check mark type size"); 3055*3d61058aSafresh1ok(&Devel::PPPort::mark_max(), "got a mark max"); 3056