This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
handy.h: Create nBIT_UMAX() macro
authorKarl Williamson <khw@cpan.org>
Fri, 29 May 2020 20:38:36 +0000 (14:38 -0600)
committerKarl Williamson <khw@cpan.org>
Sat, 18 Jul 2020 04:04:08 +0000 (22:04 -0600)
This encapsulates a common paradigm

handy.h
regcomp.h
sv.h

diff --git a/handy.h b/handy.h
index 7f07417..02ece2b 100644 (file)
--- a/handy.h
+++ b/handy.h
@@ -276,6 +276,9 @@ typedef U64TYPE U64;
 #  define nBIT_MASK(n) ((1UL << (n)) - 1)
 #endif
 
+/* The largest unsigned number that will fit into n bits */
+#define nBIT_UMAX(n)  nBIT_MASK(n)
+
 /*
 =for apidoc Am|void|__ASSERT_|bool expr
 
index d39f1ae..e12ce35 100644 (file)
--- a/regcomp.h
+++ b/regcomp.h
@@ -259,7 +259,7 @@ struct regnode_ssc {
 */
 #if SHORTSIZE > 2
 #  ifndef REG_INFTY
-#    define REG_INFTY ((1<<16)-1)
+#    define REG_INFTY  nBIT_UMAX(16)
 #  endif
 #endif
 
diff --git a/sv.h b/sv.h
index ebff9f5..2f4a85f 100644 (file)
--- a/sv.h
+++ b/sv.h
@@ -1973,7 +1973,7 @@ Like C<sv_catsv> but doesn't process magic.
                            && SvCUR(sv)+1 < SvLEN(sv))
    /* Note: To allow 256 COW "copies", a refcnt of 0 means 1. */
 #   define CowREFCNT(sv)       (*(U8 *)(SvPVX(sv)+SvLEN(sv)-1))
-#   define SV_COW_REFCNT_MAX   ((1 << sizeof(U8)*8) - 1)
+#   define SV_COW_REFCNT_MAX   nBIT_UMAX(sizeof(U8) * CHARBITS)
 #   define CAN_COW_MASK        (SVf_POK|SVf_ROK|SVp_POK|SVf_FAKE| \
                         SVf_OOK|SVf_BREAK|SVf_READONLY|SVf_PROTECT)
 #endif