This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add PERL_VERSION_GE macro, and kin
authorKarl Williamson <khw@cpan.org>
Wed, 15 Jul 2020 21:11:47 +0000 (15:11 -0600)
committerKarl Williamson <khw@cpan.org>
Fri, 17 Jul 2020 20:05:28 +0000 (14:05 -0600)
This moves things from vutil.h, and into handy.h; this is required for
v7

handy.h
vutil.h

diff --git a/handy.h b/handy.h
index fd08668..287e2e2 100644 (file)
--- a/handy.h
+++ b/handy.h
@@ -384,7 +384,6 @@ Perl_xxx(aTHX_ ...) form for any API calls where it's used.
 =cut
 */
 
-
 #define STR_WITH_LEN(s)  ("" s ""), (sizeof(s)-1)
 
 /* STR_WITH_LEN() shortcuts */
@@ -421,6 +420,45 @@ Perl_xxx(aTHX_ ...) form for any API calls where it's used.
 #define get_cvs(str, flags)                                    \
        Perl_get_cvn_flags(aTHX_ STR_WITH_LEN(str), (flags))
 
+/* internal helpers */
+#define PERL_RVS_TO_DECIMAL_(r,v,s) (((r)*1000000)+((v)*1000)+(s))
+#define PERL_DECIMAL_VERSION_                                               \
+        PERL_RVS_TO_DECIMAL_(PERL_REVISION, PERL_VERSION, PERL_SUBVERSION)
+
+/*
+=for apidoc AmR|bool|PERL_VERSION_EQ|const int r|const int v|const int s
+
+Returns whether or not the perl currently executing has the specified
+relationship to the perl given by the parameters.  For example,
+
+ #if PERL_VERSION_GT(5,24,2)
+   code that will only be compiled on perls after v5.24.2
+ #else
+   fallback code
+ #endif
+
+Note that this is usable in making compile-time decisions
+
+The possible comparisons are C<PERL_VERSION_EQ>, C<PERL_VERSION_NE>,
+C<PERL_VERSION_GE>, C<PERL_VERSION_GT>, C<PERL_VERSION_LE>, and
+C<PERL_VERSION_LT>.
+
+=for apidoc AmRh|bool|PERL_VERSION_NE|const int r|const int v|const int s
+=for apidoc AmRh|bool|PERL_VERSION_GE|const int r|const int v|const int s
+=for apidoc AmRh|bool|PERL_VERSION_GT|const int r|const int v|const int s
+=for apidoc AmRh|bool|PERL_VERSION_LE|const int r|const int v|const int s
+=for apidoc AmRh|bool|PERL_VERSION_LT|const int r|const int v|const int s
+
+=cut
+*/
+
+# define PERL_VERSION_EQ(r,v,s) (PERL_DECIMAL_VERSION_ == PERL_RVS_TO_DECIMAL_(r,v,s))
+# define PERL_VERSION_NE(r,v,s) (! PERL_VERSION_EQ(r,v,s))
+# define PERL_VERSION_LT(r,v,s) (PERL_DECIMAL_VERSION_ < PERL_RVS_TO_DECIMAL_(r,v,s))
+# define PERL_VERSION_LE(r,v,s) (PERL_DECIMAL_VERSION_ <= PERL_RVS_TO_DECIMAL_(r,v,s))
+# define PERL_VERSION_GT(r,v,s) (! PERL_VERSION_LE(r,v,s))
+# define PERL_VERSION_GE(r,v,s) (! PERL_VERSION_LT(r,v,s))
+
 /*
 =head1 Miscellaneous Functions
 
diff --git a/vutil.h b/vutil.h
index ffeb05c..ecd627e 100644 (file)
--- a/vutil.h
+++ b/vutil.h
@@ -75,14 +75,6 @@ Perl_ck_warner(pTHX_ U32 err, const char* pat, ...)
 #  endif
 #endif
 
-#define PERL_VERSION_DECIMAL(r,v,s) (r*1000000 + v*1000 + s)
-#define PERL_DECIMAL_VERSION \
-       PERL_VERSION_DECIMAL(PERL_REVISION,PERL_VERSION,PERL_SUBVERSION)
-#define PERL_VERSION_LT(r,v,s) \
-       (PERL_DECIMAL_VERSION < PERL_VERSION_DECIMAL(r,v,s))
-#define PERL_VERSION_GE(r,v,s) \
-       (PERL_DECIMAL_VERSION >= PERL_VERSION_DECIMAL(r,v,s))
-
 #if PERL_VERSION_LT(5,15,4)
 #  define ISA_VERSION_OBJ(v) (sv_isobject(v) && sv_derived_from(v,"version"))
 #else