This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Match ops no longer need OPpTARGET_MY
[perl5.git] / utf8.h
diff --git a/utf8.h b/utf8.h
index 668626f..ce537c0 100644 (file)
--- a/utf8.h
+++ b/utf8.h
@@ -127,8 +127,8 @@ END_EXTERN_C
 
 /* Native character to/from iso-8859-1.  Are the identity functions on ASCII
  * platforms */
-#define NATIVE_TO_LATIN1(ch)     (ch)
-#define LATIN1_TO_NATIVE(ch)     (ch)
+#define NATIVE_TO_LATIN1(ch)     (__ASSERT_(FITS_IN_8_BITS(ch)) (ch))
+#define LATIN1_TO_NATIVE(ch)     (__ASSERT_(FITS_IN_8_BITS(ch)) (ch))
 
 /* I8 is an intermediate version of UTF-8 used only in UTF-EBCDIC.  We thus
  * consider it to be identical to UTF-8 on ASCII platforms.  Strictly speaking
@@ -136,8 +136,8 @@ END_EXTERN_C
  * because they are 8-bit encodings that serve the same purpose in Perl, and
  * rarely do we need to distinguish them.  The term "NATIVE_UTF8" applies to
  * whichever one is applicable on the current platform */
-#define NATIVE_UTF8_TO_I8(ch) (ch)
-#define I8_TO_NATIVE_UTF8(ch) (ch)
+#define NATIVE_UTF8_TO_I8(ch) (__ASSERT_(FITS_IN_8_BITS(ch)) (ch))
+#define I8_TO_NATIVE_UTF8(ch) (__ASSERT_(FITS_IN_8_BITS(ch)) (ch))
 
 /* Transforms in wide UV chars */
 #define UNI_TO_NATIVE(ch)        (ch)
@@ -192,12 +192,12 @@ Perl's extended UTF-8 means we can have start bytes up to FF.
 
 /* Is the representation of the Unicode code point 'cp' the same regardless of
  * being encoded in UTF-8 or not? */
-#define UNI_IS_INVARIANT(cp)     isASCII(cp)
+#define OFFUNI_IS_INVARIANT(cp)     isASCII(cp)
 
 /* Is the representation of the code point 'cp' the same regardless of
  * being encoded in UTF-8 or not?  'cp' is native if < 256; Unicode otherwise
  * */
-#define UVCHR_IS_INVARIANT(uv)      UNI_IS_INVARIANT(uv)
+#define UVCHR_IS_INVARIANT(uv)      OFFUNI_IS_INVARIANT(uv)
 
 /* Misleadingly named: is the UTF8-encoded byte 'c' part of a variant sequence
  * in UTF-8?  This is the inverse of UTF8_IS_INVARIANT */
@@ -401,6 +401,10 @@ only) byte is pointed to by C<s>.
 #define UTF8SKIP(s)  PL_utf8skip[*(const U8*)(s)]
 #define UTF8_SKIP(s) UTF8SKIP(s)
 
+/* Most code that says 'UNI_' really means the native value for code points up
+ * through 255 */
+#define UNI_IS_INVARIANT(cp)   UVCHR_IS_INVARIANT(cp)
+
 /* Is the byte 'c' the same character when encoded in UTF-8 as when not.  This
  * works on both UTF-8 encoded strings and non-encoded, as it returns TRUE in
  * each for the exact same set of bit patterns.  It is valid on a subset of