utf8.c: Move some #defines here, the only file that uses them
authorKarl Williamson <khw@cpan.org>
Fri, 12 May 2017 03:31:58 +0000 (21:31 -0600)
committerKarl Williamson <khw@cpan.org>
Sat, 1 Jul 2017 23:01:36 +0000 (17:01 -0600)
These are very specialized #defines to determine if UTF-8 overflows the
word size of the platform.  I think its unwise to make them kinda
generally available.

utf8.c
utf8.h
utfebcdic.h

diff --git a/utf8.c b/utf8.c
index 96c1329..ee5405f 100644 (file)
--- a/utf8.c
+++ b/utf8.c
@@ -470,6 +470,24 @@ S_is_utf8_cp_above_31_bits(const U8 * const s, const U8 * const e)
 
 }
 
+/* Anything larger than this will overflow the word if it were converted into a UV */
+#if defined(UV_IS_QUAD)
+#  ifdef EBCDIC     /* Actually is I8 */
+#   define HIGHEST_REPRESENTABLE_UTF8                                       \
+                "\xFF\xAF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF"
+#  else
+#   define HIGHEST_REPRESENTABLE_UTF8                                       \
+                "\xFF\x80\x8F\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF"
+#  endif
+#else   /* 32-bit */
+#  ifdef EBCDIC
+#   define HIGHEST_REPRESENTABLE_UTF8                                       \
+                "\xFF\xA0\xA0\xA0\xA0\xA0\xA0\xA3\xBF\xBF\xBF\xBF\xBF\xBF"
+#  else
+#   define HIGHEST_REPRESENTABLE_UTF8  "\xFE\x83\xBF\xBF\xBF\xBF\xBF"
+#  endif
+#endif
+
 PERL_STATIC_INLINE bool
 S_does_utf8_overflow(const U8 * const s, const U8 * e)
 {
diff --git a/utf8.h b/utf8.h
index 276fa29..e26f3cc 100644 (file)
--- a/utf8.h
+++ b/utf8.h
@@ -235,13 +235,6 @@ are in the character.
 
 */
 
-/* Anything larger than this will overflow the word if it were converted into a UV */
-#if defined(UV_IS_QUAD)
-#   define HIGHEST_REPRESENTABLE_UTF8  "\xFF\x80\x8F\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF"
-#else
-#   define HIGHEST_REPRESENTABLE_UTF8  "\xFE\x83\xBF\xBF\xBF\xBF\xBF"
-#endif
-
 /* Is the representation of the Unicode code point 'cp' the same regardless of
  * being encoded in UTF-8 or not? */
 #define OFFUNI_IS_INVARIANT(cp)     isASCII(cp)
index 08b934b..0f81d1f 100644 (file)
@@ -268,13 +268,6 @@ explicitly forbidden, and the shortest possible encoding should always be used
  * for more */
 #define QUESTION_MARK_CTRL   LATIN1_TO_NATIVE(0x9F)
 
-/* Any I8 string larger than this will overflow the word if it were converted into a UV */
-#if defined(UV_IS_QUAD)
-#   define HIGHEST_REPRESENTABLE_UTF8  "\xFF\xAF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF"
-#else
-#   define HIGHEST_REPRESENTABLE_UTF8  "\xFF\xA0\xA0\xA0\xA0\xA0\xA0\xA3\xBF\xBF\xBF\xBF\xBF\xBF"
-#endif
-
 /* Helper macros for isUTF8_CHAR_foo, so use those instead of this.  These were
  * generated by regen/regcharclass.pl, and then moved here.  Then they were
  * hand-edited to add some LIKELY() calls, presuming that malformations are