handy.h: Add some comments
authorKarl Williamson <khw@cpan.org>
Thu, 8 Nov 2018 01:40:37 +0000 (18:40 -0700)
committerKarl Williamson <khw@cpan.org>
Fri, 16 Nov 2018 15:37:12 +0000 (08:37 -0700)
This allows us to remove a comment in regcomp.c

handy.h
regcomp.c

diff --git a/handy.h b/handy.h
index 325e7fb..3e1aa1b 100644 (file)
--- a/handy.h
+++ b/handy.h
@@ -1463,13 +1463,18 @@ END_EXTERN_C
     #define toLOWER(c) (isASCII(c) ? toLOWER_LATIN1(c) : (c))
     #define toUPPER(c) (isASCII(c) ? toUPPER_LATIN1_MOD(c) : (c))
    which uses table lookup and mask instead of subtraction.  (This would
-   work because the _MOD does not apply in the ASCII range) */
+   work because the _MOD does not apply in the ASCII range).
+
+   These actually are UTF-8 invariant casing, not just ASCII, as any non-ASCII
+   UTF-8 invariants are neither upper nor lower.  (Only on EBCDIC platforms are
+   there non-ASCII invariants, and all of them are controls.) */
 #define toLOWER(c)  (isUPPER(c) ? (U8)((c) + ('a' - 'A')) : (c))
 #define toUPPER(c)  (isLOWER(c) ? (U8)((c) - ('a' - 'A')) : (c))
 
 /* In the ASCII range, these are equivalent to what they're here defined to be.
  * But by creating these definitions, other code doesn't have to be aware of
- * this detail */
+ * this detail.  Actually this works for all UTF-8 invariants, not just the
+ * ASCII range. (EBCDIC platforms can have non-ASCII invariants.) */
 #define toFOLD(c)    toLOWER(c)
 #define toTITLE(c)   toUPPER(c)
 
index 5d5f715..7b3bc69 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -12830,10 +12830,7 @@ S_alloc_maybe_populate_EXACT(pTHX_ RExC_state_t *pRExC_state,
                 if (LOC || ! FOLD) {    /* /l defers folding until runtime */
                     *character = (U8) code_point;
                 }
-                else { /* Here is /i and not /l. (toFOLD() is defined on just
-                          ASCII, which isn't the same thing as INVARIANT on
-                          EBCDIC, but it works there, as the extra invariants
-                          fold to themselves) */
+                else { /* Here is /i and not /l. */
                     *character = toFOLD((U8) code_point);
 
                     /* We can downgrade to an EXACT node if this character