[libmath-prime-util-perl] 15/15: Workaround for MSVC compiler
Partha P. Mukherjee
ppm-guest at moszumanska.debian.org
Thu May 21 18:48:47 UTC 2015
This is an automated email from the git hooks/post-receive script.
ppm-guest pushed a commit to annotated tag v0.29
in repository libmath-prime-util-perl.
commit a8d928e44a1e60192977e54c75d8c62d770a8ce5
Author: Dana Jacobsen <dana at acm.org>
Date: Thu May 30 23:50:03 2013 -0700
Workaround for MSVC compiler
---
Changes | 2 ++
XS.xs | 25 ++++++++++++++++++++++---
2 files changed, 24 insertions(+), 3 deletions(-)
diff --git a/Changes b/Changes
index aa6c381..a798d32 100644
--- a/Changes
+++ b/Changes
@@ -17,6 +17,8 @@ Revision history for Perl extension Math::Prime::Util.
Math::MPFR. Switch to Li+correction for large values if Math::MPFR is
not available.
+ - Workaround for MSVC compiler.
+
- Added:
is_pseudoprime (Fermat probable prime test)
is_lucas_pseudoprime (standard Lucas-Selfridge test)
diff --git a/XS.xs b/XS.xs
index 6b959f8..8f32f45 100644
--- a/XS.xs
+++ b/XS.xs
@@ -325,7 +325,7 @@ erat_primes(IN UV low, IN UV high)
RETVAL
-#define SIMPLE_FACTOR(func, n, ...) \
+#define SIMPLE_FACTOR(func, n, arg1) \
if (n <= 1) { \
XPUSHs(sv_2mortal(newSVuv( n ))); \
} else { \
@@ -337,7 +337,26 @@ erat_primes(IN UV low, IN UV high)
else { \
UV factors[MPU_MAX_FACTORS+1]; \
int i, nfactors; \
- nfactors = func(n, factors, ## __VA_ARGS__); \
+ nfactors = func(n, factors, arg1); \
+ for (i = 0; i < nfactors; i++) { \
+ XPUSHs(sv_2mortal(newSVuv( factors[i] ))); \
+ } \
+ } \
+ }
+#define SIMPLE_FACTOR_2ARG(func, n, arg1, arg2) \
+ /* Stupid MSVC won't bring its C compiler out of the 1980s. */ \
+ if (n <= 1) { \
+ XPUSHs(sv_2mortal(newSVuv( n ))); \
+ } else { \
+ while ( (n% 2) == 0 ) { n /= 2; XPUSHs(sv_2mortal(newSVuv( 2 ))); } \
+ while ( (n% 3) == 0 ) { n /= 3; XPUSHs(sv_2mortal(newSVuv( 3 ))); } \
+ while ( (n% 5) == 0 ) { n /= 5; XPUSHs(sv_2mortal(newSVuv( 5 ))); } \
+ if (n == 1) { /* done */ } \
+ else if (_XS_is_prime(n)) { XPUSHs(sv_2mortal(newSVuv( n ))); } \
+ else { \
+ UV factors[MPU_MAX_FACTORS+1]; \
+ int i, nfactors; \
+ nfactors = func(n, factors, arg1, arg2); \
for (i = 0; i < nfactors; i++) { \
XPUSHs(sv_2mortal(newSVuv( factors[i] ))); \
} \
@@ -396,7 +415,7 @@ pminus1_factor(IN UV n, IN UV B1 = 1*1024*1024, IN UV B2 = 0)
PPCODE:
if (B2 == 0)
B2 = 10*B1;
- SIMPLE_FACTOR(pminus1_factor, n, B1, B2);
+ SIMPLE_FACTOR_2ARG(pminus1_factor, n, B1, B2);
int
_XS_is_pseudoprime(IN UV n, IN UV a)
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libmath-prime-util-perl.git
More information about the Pkg-perl-cvs-commits
mailing list