summaryrefslogtreecommitdiff
path: root/regcomp.h
diff options
context:
space:
mode:
authorKarl Williamson <khw@cpan.org>2021-07-20 06:03:16 -0600
committerKarl Williamson <khw@cpan.org>2021-07-30 05:41:28 -0600
commitad494d15d17ba5d23ba2b9adc3d990c5f566f6f1 (patch)
tree2573854b0cf4a749ecf3afc3278d3d2a64e71db2 /regcomp.h
parent19d2c525bfed3f9eea1099e6eb745dbb50ca818b (diff)
downloadperl-ad494d15d17ba5d23ba2b9adc3d990c5f566f6f1.tar.gz
regcomp.h: Add internal macro
This returns the locale bitmap field from an ANYOF node. In this commit, it just tidies up the code, omitting lengthy casts. But a future commit will use it on its own.
Diffstat (limited to 'regcomp.h')
-rw-r--r--regcomp.h25
1 files changed, 13 insertions, 12 deletions
diff --git a/regcomp.h b/regcomp.h
index b92a08820f..ec3c756148 100644
--- a/regcomp.h
+++ b/regcomp.h
@@ -680,30 +680,32 @@ struct regnode_ssc {
#define ANYOF_BIT(c) (1U << ((c) & 7))
+#define ANYOF_POSIXL_BITMAP(p) (((regnode_charclass_posixl*) (p))->classflags)
+
#define POSIXL_SET(field, c) ((field) |= (1U << (c)))
-#define ANYOF_POSIXL_SET(p, c) POSIXL_SET(((regnode_charclass_posixl*) (p))->classflags, (c))
+#define ANYOF_POSIXL_SET(p, c) POSIXL_SET(ANYOF_POSIXL_BITMAP(p), (c))
#define POSIXL_CLEAR(field, c) ((field) &= ~ (1U <<(c)))
-#define ANYOF_POSIXL_CLEAR(p, c) POSIXL_CLEAR(((regnode_charclass_posixl*) (p))->classflags, (c))
+#define ANYOF_POSIXL_CLEAR(p, c) POSIXL_CLEAR(ANYOF_POSIXL_BITMAP(p), (c))
#define POSIXL_TEST(field, c) ((field) & (1U << (c)))
-#define ANYOF_POSIXL_TEST(p, c) POSIXL_TEST(((regnode_charclass_posixl*) (p))->classflags, (c))
+#define ANYOF_POSIXL_TEST(p, c) POSIXL_TEST(ANYOF_POSIXL_BITMAP(p), (c))
#define POSIXL_ZERO(field) STMT_START { (field) = 0; } STMT_END
-#define ANYOF_POSIXL_ZERO(ret) POSIXL_ZERO(((regnode_charclass_posixl*) (ret))->classflags)
+#define ANYOF_POSIXL_ZERO(ret) POSIXL_ZERO(ANYOF_POSIXL_BITMAP(ret))
#define ANYOF_POSIXL_SET_TO_BITMAP(p, bits) \
- STMT_START { \
- ((regnode_charclass_posixl*) (p))->classflags = (bits); \
- } STMT_END
+ STMT_START { ANYOF_POSIXL_BITMAP(p) = (bits); } STMT_END
/* Shifts a bit to get, eg. 0x4000_0000, then subtracts 1 to get 0x3FFF_FFFF */
-#define ANYOF_POSIXL_SETALL(ret) STMT_START { ((regnode_charclass_posixl*) (ret))->classflags = nBIT_MASK(ANYOF_POSIXL_MAX); } STMT_END
+#define ANYOF_POSIXL_SETALL(ret) \
+ STMT_START { \
+ ANYOF_POSIXL_BITMAP(ret) = nBIT_MASK(ANYOF_POSIXL_MAX); \
+ } STMT_END
#define ANYOF_CLASS_SETALL(ret) ANYOF_POSIXL_SETALL(ret)
#define ANYOF_POSIXL_TEST_ANY_SET(p) \
- ((ANYOF_FLAGS(p) & ANYOF_MATCHES_POSIXL) \
- && (((regnode_charclass_posixl*)(p))->classflags))
+ ((ANYOF_FLAGS(p) & ANYOF_MATCHES_POSIXL) && ANYOF_POSIXL_BITMAP(p))
#define ANYOF_CLASS_TEST_ANY_SET(p) ANYOF_POSIXL_TEST_ANY_SET(p)
/* Since an SSC always has this field, we don't have to test for that; nor do
@@ -716,8 +718,7 @@ struct regnode_ssc {
#define ANYOF_POSIXL_TEST_ALL_SET(p) \
((ANYOF_FLAGS(p) & ANYOF_MATCHES_POSIXL) \
- && ((regnode_charclass_posixl*) (p))->classflags \
- == nBIT_MASK(ANYOF_POSIXL_MAX))
+ && ANYOF_POSIXL_BITMAP(p) == nBIT_MASK(ANYOF_POSIXL_MAX))
#define ANYOF_POSIXL_OR(source, dest) STMT_START { (dest)->classflags |= (source)->classflags ; } STMT_END
#define ANYOF_CLASS_OR(source, dest) ANYOF_POSIXL_OR((source), (dest))