This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Backport UTF8_IS_INVARIANT, UVCHR_IS_INVARIANT
authorKarl Williamson <khw@cpan.org>
Fri, 12 Jul 2019 18:33:08 +0000 (12:33 -0600)
committerNicolas R <atoomic@cpan.org>
Fri, 27 Sep 2019 22:51:28 +0000 (16:51 -0600)
(cherry picked from commit ad7eb4eca683a879c64475969870e5333e034e87)
Signed-off-by: Nicolas R <atoomic@cpan.org>
dist/Devel-PPPort/parts/inc/utf8
dist/Devel-PPPort/t/utf8.t

index a87537e..02a4928 100644 (file)
@@ -39,6 +39,14 @@ __UNDEFINED__  UTF8_SAFE_SKIP(s, e)  (
                                       : D_PPP_MIN(((e) - (s)), UTF8SKIP(s))))
 #endif
 
+#if 'A' == 65
+__UNDEFINED__ UTF8_IS_INVARIANT(c)   isASCII(c)
+#else
+__UNDEFINED__ UTF8_IS_INVARIANT(c)  (isASCII(c) || isCNTRL_L1(c))
+#endif
+
+__UNDEFINED__ UVCHR_IS_INVARIANT(c)  UTF8_IS_INVARIANT(c)
+
 #ifdef is_ascii_string
 __UNDEFINED__ is_invariant_string(s,l) is_ascii_string(s,l)
 __UNDEFINED__ is_utf8_invariant_string(s,l) is_ascii_string(s,l)
@@ -470,13 +478,26 @@ sv_len_utf8_nomg(sv)
 
 #endif
 
-=tests plan => 81
+#ifdef UVCHR_IS_INVARIANT
+
+bool
+UVCHR_IS_INVARIANT(c)
+        unsigned c
+        PREINIT:
+        CODE:
+            RETVAL = UVCHR_IS_INVARIANT(c);
+        OUTPUT:
+            RETVAL
+
+#endif
+
+=tests plan => 84
 
 BEGIN { require warnings if "$]" > '5.006' }
 
 # skip tests on 5.6.0 and earlier, plus 7.0
 if ("$]" <= '5.006' || "$]" == '5.007' ) {
-    for (1..81) {
+    for (1..84) {
         skip 'skip: broken utf8 support', 0;
     }
     exit;
@@ -490,6 +511,10 @@ ok(&Devel::PPPort::isUTF8_CHAR("A",  0), 1);
 ok(&Devel::PPPort::isUTF8_CHAR("\x{100}",  -1), 0);
 ok(&Devel::PPPort::isUTF8_CHAR("\x{100}",  0), 2);
 
+ok(&Devel::PPPort::UVCHR_IS_INVARIANT(ord("A")), 1);
+ok(! &Devel::PPPort::UVCHR_IS_INVARIANT(0xb6));
+ok(! &Devel::PPPort::UVCHR_IS_INVARIANT(0x100));
+
 if ("$]" < '5.008') {
     for (1 ..3) {
         ok(1, 1)
index 6caeb6e..397a7e7 100644 (file)
@@ -30,9 +30,9 @@ BEGIN {
     require 'testutil.pl' if $@;
   }
 
-  if (81) {
+  if (84) {
     load();
-    plan(tests => 81);
+    plan(tests => 84);
   }
 }
 
@@ -52,7 +52,7 @@ BEGIN { require warnings if "$]" > '5.006' }
 
 # skip tests on 5.6.0 and earlier, plus 7.0
 if ("$]" <= '5.006' || "$]" == '5.007' ) {
-    for (1..81) {
+    for (1..84) {
         skip 'skip: broken utf8 support', 0;
     }
     exit;
@@ -66,6 +66,10 @@ ok(&Devel::PPPort::isUTF8_CHAR("A",  0), 1);
 ok(&Devel::PPPort::isUTF8_CHAR("\x{100}",  -1), 0);
 ok(&Devel::PPPort::isUTF8_CHAR("\x{100}",  0), 2);
 
+ok(&Devel::PPPort::UVCHR_IS_INVARIANT(ord("A")), 1);
+ok(! &Devel::PPPort::UVCHR_IS_INVARIANT(0xb6));
+ok(! &Devel::PPPort::UVCHR_IS_INVARIANT(0x100));
+
 if ("$]" < '5.008') {
     for (1 ..3) {
         ok(1, 1)