From 1381ccb17f202d8a856cc7ccc17ae470b99ba9b6 Mon Sep 17 00:00:00 2001 From: Karl Williamson Date: Fri, 29 May 2020 14:38:36 -0600 Subject: [PATCH] handy.h: Create nBIT_UMAX() macro This encapsulates a common paradigm --- handy.h | 3 +++ regcomp.h | 2 +- sv.h | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/handy.h b/handy.h index 7f07417..02ece2b 100644 --- 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 diff --git a/regcomp.h b/regcomp.h index d39f1ae..e12ce35 100644 --- 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 --- a/sv.h +++ b/sv.h @@ -1973,7 +1973,7 @@ Like C 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 -- 1.8.3.1