From 41f43cc22340d382ce3bf1249a2521a4ec5285a8 Mon Sep 17 00:00:00 2001 From: Karl Williamson Date: Sat, 24 Sep 2011 11:46:54 -0600 Subject: [PATCH] handy.h: Simplify isASCII definition Thus retains essentially the same definition for EBCDIC platforms, but substitutes a simpler one for ASCII platforms. On my system, the new definition compiles to about half the assembly instructions that the old one did (non-optimized) A bomb-proof definition of ASCII is to make sure that the value is unsigned in the largest possible unsigned for the platform so there is no possible loss of information, and then the ord must be < 128. --- handy.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/handy.h b/handy.h index 5f0bdd3..1f78e96 100644 --- a/handy.h +++ b/handy.h @@ -582,7 +582,12 @@ patched there. The file as of this writing is cpan/Devel-PPPort/parts/inc/misc #define FITS_IN_8_BITS(c) ((sizeof(c) == 1) \ || (((WIDEST_UTYPE)(c) & 0xFF) == (WIDEST_UTYPE)(c))) -#define isASCII(c) (FITS_IN_8_BITS(c) ? NATIVE_TO_UNI((U8) c) <= 127 : 0) +#ifdef EBCDIC +# define isASCII(c) (FITS_IN_8_BITS(c) ? NATIVE_TO_UNI((U8) (c)) < 128 : 0) +#else +# define isASCII(c) ((WIDEST_UTYPE)(c) < 128) +#endif + #define isASCII_A(c) isASCII(c) /* ASCII range only */ -- 2.7.4