Move isPOWER_OF_2() macro to handy.h
authorKarl Williamson <khw@cpan.org>
Sun, 25 Nov 2018 19:14:49 +0000 (12:14 -0700)
committerKarl Williamson <khw@cpan.org>
Tue, 27 Nov 2018 04:26:45 +0000 (21:26 -0700)
This is in preparation for it to be used outside of the file which
previously defined it.

handy.h
regexec.c

diff --git a/handy.h b/handy.h
index 3e1aa1b..b7877b2 100644 (file)
--- a/handy.h
+++ b/handy.h
@@ -255,6 +255,14 @@ typedef U64TYPE U64;
 #  endif
 #endif
 
+/* Returns a boolean as to whether the input unsigned number is a power of 2
+ * (2**0, 2**1, etc).  In other words if it has just a single bit set.
+ * If not, subtracting 1 would leave the uppermost bit set, so the & would
+ * yield non-zero */
+#if defined(PERL_CORE) || defined(PERL_EXT)
+#  define isPOWER_OF_2(n) ((n & (n-1)) == 0)
+#endif
+
 /* This is a helper macro to avoid preprocessor issues, replaced by nothing
  * unless under DEBUGGING, where it expands to an assert of its argument,
  * followed by a comma (hence the comma operator).  If we just used a straight
index be1f5ae..cd55c86 100644 (file)
--- a/regexec.c
+++ b/regexec.c
@@ -96,12 +96,6 @@ static const char* const non_utf8_target_but_utf8_required
                 = "Can't match, because target string needs to be in UTF-8\n";
 #endif
 
-/* Returns a boolean as to whether the input unsigned number is a power of 2
- * (2**0, 2**1, etc).  In other words if it has just a single bit set.
- * If not, subtracting 1 would leave the uppermost bit set, so the & would
- * yield non-zero */
-#define isPOWER_OF_2(n) ((n & (n-1)) == 0)
-
 #define NON_UTF8_TARGET_BUT_UTF8_REQUIRED(target) STMT_START {           \
     DEBUG_EXECUTE_r(Perl_re_printf( aTHX_  "%s", non_utf8_target_but_utf8_required));\
     goto target;                                                         \