1 /* This file is part of the "version" CPAN distribution. Please avoid 2 editing it in the perl core. */ 3 4 /* The MUTABLE_*() macros cast pointers to the types shown, in such a way 5 * (compiler permitting) that casting away const-ness will give a warning; 6 * e.g.: 7 * 8 * const SV *sv = ...; 9 * AV *av1 = (AV*)sv; <== BAD: the const has been silently cast away 10 * AV *av2 = MUTABLE_AV(sv); <== GOOD: it may warn 11 */ 12 13 #if PERL_VERSION_LT(5,15,4) 14 # define ISA_VERSION_OBJ(v) (sv_isobject(v) && sv_derived_from(v,"version")) 15 #else 16 # define ISA_VERSION_OBJ(v) (sv_isobject(v) && sv_derived_from_pvn(v,"version",7,0)) 17 #endif 18 19 #if PERL_VERSION_GE(5,9,0) && !defined(PERL_CORE) 20 21 # define VUTIL_REPLACE_CORE 1 22 23 static const char * Perl_scan_version2(pTHX_ const char *s, SV *rv, bool qv); 24 static SV * Perl_new_version2(pTHX_ SV *ver); 25 static SV * Perl_upg_version2(pTHX_ SV *sv, bool qv); 26 static SV * Perl_vstringify2(pTHX_ SV *vs); 27 static SV * Perl_vverify2(pTHX_ SV *vs); 28 static SV * Perl_vnumify2(pTHX_ SV *vs); 29 static SV * Perl_vnormal2(pTHX_ SV *vs); 30 static SV * Perl_vstringify2(pTHX_ SV *vs); 31 static int Perl_vcmp2(pTHX_ SV *lsv, SV *rsv); 32 static const char * Perl_prescan_version2(pTHX_ const char *s, bool strict, const char** errstr, bool *sqv, int *ssaw_decimal, int *swidth, bool *salpha); 33 34 # define SCAN_VERSION(a,b,c) Perl_scan_version2(aTHX_ a,b,c) 35 # define NEW_VERSION(a) Perl_new_version2(aTHX_ a) 36 # define UPG_VERSION(a,b) Perl_upg_version2(aTHX_ a, b) 37 # define VSTRINGIFY(a) Perl_vstringify2(aTHX_ a) 38 # define VVERIFY(a) Perl_vverify2(aTHX_ a) 39 # define VNUMIFY(a) Perl_vnumify2(aTHX_ a) 40 # define VNORMAL(a) Perl_vnormal2(aTHX_ a) 41 # define VCMP(a,b) Perl_vcmp2(aTHX_ a,b) 42 # define PRESCAN_VERSION(a,b,c,d,e,f,g) Perl_prescan_version2(aTHX_ a,b,c,d,e,f,g) 43 # undef is_LAX_VERSION 44 # define is_LAX_VERSION(a,b) \ 45 (a != Perl_prescan_version2(aTHX_ a, FALSE, b, NULL, NULL, NULL, NULL)) 46 # undef is_STRICT_VERSION 47 # define is_STRICT_VERSION(a,b) \ 48 (a != Perl_prescan_version2(aTHX_ a, TRUE, b, NULL, NULL, NULL, NULL)) 49 50 #else 51 52 const char * Perl_scan_version(pTHX_ const char *s, SV *rv, bool qv); 53 SV * Perl_new_version(pTHX_ SV *ver); 54 SV * Perl_upg_version(pTHX_ SV *sv, bool qv); 55 SV * Perl_vverify(pTHX_ SV *vs); 56 SV * Perl_vnumify(pTHX_ SV *vs); 57 SV * Perl_vnormal(pTHX_ SV *vs); 58 SV * Perl_vstringify(pTHX_ SV *vs); 59 int Perl_vcmp(pTHX_ SV *lsv, SV *rsv); 60 const char * Perl_prescan_version(pTHX_ const char *s, bool strict, const char** errstr, bool *sqv, int *ssaw_decimal, int *swidth, bool *salpha); 61 62 # define SCAN_VERSION(a,b,c) Perl_scan_version(aTHX_ a,b,c) 63 # define NEW_VERSION(a) Perl_new_version(aTHX_ a) 64 # define UPG_VERSION(a,b) Perl_upg_version(aTHX_ a, b) 65 # define VSTRINGIFY(a) Perl_vstringify(aTHX_ a) 66 # define VVERIFY(a) Perl_vverify(aTHX_ a) 67 # define VNUMIFY(a) Perl_vnumify(aTHX_ a) 68 # define VNORMAL(a) Perl_vnormal(aTHX_ a) 69 # define VCMP(a,b) Perl_vcmp(aTHX_ a,b) 70 71 # define PRESCAN_VERSION(a,b,c,d,e,f,g) Perl_prescan_version(aTHX_ a,b,c,d,e,f,g) 72 # ifndef is_LAX_VERSION 73 # define is_LAX_VERSION(a,b) \ 74 (a != Perl_prescan_version(aTHX_ a, FALSE, b, NULL, NULL, NULL, NULL)) 75 # endif 76 # ifndef is_STRICT_VERSION 77 # define is_STRICT_VERSION(a,b) \ 78 (a != Perl_prescan_version(aTHX_ a, TRUE, b, NULL, NULL, NULL, NULL)) 79 # endif 80 81 #endif 82 83 #if PERL_VERSION_LT(5,11,4) 84 # define BADVERSION(a,b,c) \ 85 if (b) { \ 86 *b = c; \ 87 } \ 88 return a; 89 90 # define PERL_ARGS_ASSERT_PRESCAN_VERSION \ 91 assert(s); assert(sqv); assert(ssaw_decimal);\ 92 assert(swidth); assert(salpha); 93 94 # define PERL_ARGS_ASSERT_SCAN_VERSION \ 95 assert(s); assert(rv) 96 # define PERL_ARGS_ASSERT_NEW_VERSION \ 97 assert(ver) 98 # define PERL_ARGS_ASSERT_UPG_VERSION \ 99 assert(ver) 100 # define PERL_ARGS_ASSERT_VVERIFY \ 101 assert(vs) 102 # define PERL_ARGS_ASSERT_VNUMIFY \ 103 assert(vs) 104 # define PERL_ARGS_ASSERT_VNORMAL \ 105 assert(vs) 106 # define PERL_ARGS_ASSERT_VSTRINGIFY \ 107 assert(vs) 108 # define PERL_ARGS_ASSERT_VCMP \ 109 assert(lhv); assert(rhv) 110 # define PERL_ARGS_ASSERT_CK_WARNER \ 111 assert(pat) 112 #endif 113 114 /* ex: set ro: */ 115