Re-instantiate the NAN/INFINITY fixes, this time in a way that works on

older C environments as well.
This commit is contained in:
martin 2005-06-22 22:05:34 +00:00
parent 311f01a557
commit 1494ceef47
16 changed files with 438 additions and 2 deletions

View file

@ -1,4 +1,4 @@
$NetBSD: distinfo,v 1.32 2005/06/20 06:51:34 kristerw Exp $
$NetBSD: distinfo,v 1.33 2005/06/22 22:05:34 martin Exp $
SHA1 (firefox-1.0.4/firefox-1.0.4-source.tar.bz2) = d030628e52e1bebe9d6515d7fab5a126a1b6b38a
RMD160 (firefox-1.0.4/firefox-1.0.4-source.tar.bz2) = 4b04740fe4615ddddd16ec296509177ab29d4edc
@ -39,3 +39,10 @@ SHA1 (patch-cc) = cb08d4b7330c9e471d172c11772c840e613ceb76
SHA1 (patch-cd) = bbe839bce72a1d6816fa0c091172a818fb469981
SHA1 (patch-ce) = f7db7a46d40b80287774f93d55b05a5ad0c79214
SHA1 (patch-cf) = 337bc106afe7ce3fa6678fca4c0317714393a977
SHA1 (patch-cg) = 0b637509a5dfcc1ebe26412899da41dc3d06e6df
SHA1 (patch-ch) = 281dc9957784b4f75170377d09c22735ce7f8500
SHA1 (patch-ci) = b9868757c31ea577c2df99eb7f41503d55d904f0
SHA1 (patch-cj) = a17331d248dd0d3ed85c81f6c1095f384d810b0d
SHA1 (patch-ck) = 5db42f8047046e10f388bdaf299c35c415a50f8d
SHA1 (patch-cl) = 1450e99f5e5f31f0e8d01b68bb50494f84eed068
SHA1 (patch-cm) = 2a347bcf5814816539835caf65dd888f71ceea20

View file

@ -0,0 +1,85 @@
$NetBSD: patch-cg,v 1.4 2005/06/22 22:05:34 martin Exp $
--- extensions/transformiix/source/base/Double.cpp.orig 2004-01-15 22:23:18.000000000 +0100
+++ extensions/transformiix/source/base/Double.cpp 2005-06-20 11:26:26.000000000 +0200
@@ -48,6 +48,38 @@
* Utility class for doubles
*/
+#if defined(INFINITY) && defined(NAN)
+double Double::NaN()
+{
+ return NAN;
+}
+
+double Double::PositiveInfinity()
+{
+ return INFINITY;
+}
+
+double Double::NegativeInfinity()
+{
+ return -INFINITY;
+}
+
+MBool Double::isInfinite(double aDbl)
+{
+ return isinf(aDbl);
+}
+
+MBool Double::isNaN(double aDbl)
+{
+ return isnan(aDbl);
+}
+
+MBool Double::isNeg(double aDbl)
+{
+ return aDbl<0.0;
+}
+#else /* pre INFINITY C environment */
+
//A trick to handle IEEE floating point exceptions on FreeBSD - E.D.
#ifdef __FreeBSD__
#include <ieeefp.h>
@@ -127,9 +159,20 @@
const PRUint32 negInfMask[2] = {0, TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_SIGNBIT};
#endif
-const double Double::NaN = *((double*)nanMask);
-const double Double::POSITIVE_INFINITY = *((double*)infMask);
-const double Double::NEGATIVE_INFINITY = *((double*)negInfMask);
+double Double::NaN()
+{
+ return *((double*)nanMask);
+}
+
+double Double::PositiveInfinity()
+{
+ return *((double*)infMask);
+}
+
+double Double::NegativeInfinity()
+{
+ return *((double*)negInfMask);
+}
/*
* Determines whether the given double represents positive or negative
@@ -157,6 +200,7 @@
{
return (TX_DOUBLE_HI32(aDbl) & TX_DOUBLE_HI32_SIGNBIT) != 0;
}
+#endif /* C environment has INFINITY and NAN */
/*
* Converts the given String to a double, if the String value does not
@@ -244,7 +288,7 @@
{
if (mState == eIllegal || mBuffer.IsEmpty() ||
(mBuffer.Length() == 1 && mBuffer[0] == '.')) {
- return Double::NaN;
+ return Double::NaN();
}
return mSign*PR_strtod(mBuffer.get(), 0);
}

View file

@ -0,0 +1,18 @@
$NetBSD: patch-ch,v 1.3 2005/06/22 22:05:34 martin Exp $
--- extensions/transformiix/source/base/primitives.h.orig 2003-01-17 13:43:05.000000000 +0100
+++ extensions/transformiix/source/base/primitives.h 2005-06-16 09:46:56.000000000 +0200
@@ -51,10 +51,9 @@
/*
* Usefull constants
*/
-
- static const double NaN;
- static const double POSITIVE_INFINITY;
- static const double NEGATIVE_INFINITY;
+ static double NaN();
+ static double PositiveInfinity();
+ static double NegativeInfinity();
/*
* Determines whether the given double represents positive or negative

View file

@ -0,0 +1,13 @@
$NetBSD: patch-ci,v 1.3 2005/06/22 22:05:34 martin Exp $
--- extensions/transformiix/source/xpath/FunctionCall.cpp.orig 2003-11-04 16:13:03.000000000 +0100
+++ extensions/transformiix/source/xpath/FunctionCall.cpp 2005-06-16 09:14:19.000000000 +0200
@@ -92,7 +92,7 @@
nsRefPtr<txAExprResult> exprResult;
nsresult rv = aExpr->evaluate(aContext, getter_AddRefs(exprResult));
if (NS_FAILED(rv))
- return Double::NaN;
+ return Double::NaN();
return exprResult->numberValue();
}

View file

@ -0,0 +1,32 @@
$NetBSD: patch-cj,v 1.3 2005/06/22 22:05:34 martin Exp $
--- extensions/transformiix/source/xpath/MultiplicativeExpr.cpp.orig 2003-11-20 00:06:14.000000000 +0100
+++ extensions/transformiix/source/xpath/MultiplicativeExpr.cpp 2005-06-16 09:29:24.000000000 +0200
@@ -71,22 +71,22 @@
#if defined(XP_WIN)
/* XXX MSVC miscompiles such that (NaN == 0) */
if (Double::isNaN(rightDbl))
- result = Double::NaN;
+ result = Double::NaN();
else
#endif
if (leftDbl == 0 || Double::isNaN(leftDbl))
- result = Double::NaN;
+ result = Double::NaN();
else if (Double::isNeg(leftDbl) ^ Double::isNeg(rightDbl))
- result = Double::NEGATIVE_INFINITY;
+ result = Double::NegativeInfinity();
else
- result = Double::POSITIVE_INFINITY;
+ result = Double::PositiveInfinity();
}
else
result = leftDbl / rightDbl;
break;
case MODULUS:
if (rightDbl == 0) {
- result = Double::NaN;
+ result = Double::NaN();
}
else {
#if defined(XP_WIN)

View file

@ -0,0 +1,19 @@
$NetBSD: patch-ck,v 1.3 2005/06/22 22:05:34 martin Exp $
--- extensions/transformiix/source/xslt/functions/txFormatNumberFunctionCall.cpp.orig 2003-06-17 00:31:17.000000000 +0200
+++ extensions/transformiix/source/xslt/functions/txFormatNumberFunctionCall.cpp 2005-06-16 10:06:22.000000000 +0200
@@ -112,12 +112,12 @@
return aContext->recycler()->getStringResult(format->mNaN, aResult);
}
- if (value == Double::POSITIVE_INFINITY) {
+ if (value == Double::PositiveInfinity()) {
return aContext->recycler()->getStringResult(format->mInfinity,
aResult);
}
- if (value == Double::NEGATIVE_INFINITY) {
+ if (value == Double::NegativeInfinity()) {
nsAutoString res;
res.Append(format->mMinusSign);
res.Append(format->mInfinity);

View file

@ -0,0 +1,31 @@
$NetBSD: patch-cl,v 1.3 2005/06/22 22:05:34 martin Exp $
--- extensions/transformiix/source/xslt/txStylesheetCompileHandlers.cpp.orig 2004-01-29 23:04:29.000000000 +0100
+++ extensions/transformiix/source/xslt/txStylesheetCompileHandlers.cpp 2005-06-16 09:18:13.000000000 +0200
@@ -258,7 +258,7 @@
txStylesheetCompilerState& aState,
double& aNumber)
{
- aNumber = Double::NaN;
+ aNumber = Double::NaN();
txStylesheetAttr* attr = nsnull;
nsresult rv = getStyleAttr(aAttributes, aAttrCount, kNameSpaceID_None,
aName, aRequired, &attr);
@@ -479,7 +479,7 @@
NS_ENSURE_SUCCESS(rv, rv);
txExpandedName nullExpr;
- double prio = Double::NaN;
+ double prio = Double::NaN();
nsAutoPtr<txPattern> match(new txRootPattern(MB_TRUE));
NS_ENSURE_TRUE(match, NS_ERROR_OUT_OF_MEMORY);
@@ -1038,7 +1038,7 @@
aState, mode);
NS_ENSURE_SUCCESS(rv, rv);
- double prio = Double::NaN;
+ double prio = Double::NaN();
rv = getNumberAttr(aAttributes, aAttrCount, txXSLTAtoms::priority,
PR_FALSE, aState, prio);
NS_ENSURE_SUCCESS(rv, rv);

View file

@ -0,0 +1,13 @@
$NetBSD: patch-cm,v 1.3 2005/06/22 22:05:34 martin Exp $
--- extensions/transformiix/source/xslt/txXSLTPatterns.cpp.orig 2003-11-18 23:56:46.000000000 +0100
+++ extensions/transformiix/source/xslt/txXSLTPatterns.cpp 2005-06-16 09:17:00.000000000 +0200
@@ -99,7 +99,7 @@
double txUnionPattern::getDefaultPriority()
{
NS_ASSERTION(0, "Don't call getDefaultPriority on txUnionPattern");
- return Double::NaN;
+ return Double::NaN();
}
/*

View file

@ -1,4 +1,4 @@
$NetBSD: distinfo,v 1.79 2005/06/20 06:56:14 kristerw Exp $
$NetBSD: distinfo,v 1.80 2005/06/22 22:05:34 martin Exp $
SHA1 (mozilla-1.7.8-source.tar.bz2) = ca682415a9ba99a3c4bd55636e1f9fda53a2545f
RMD160 (mozilla-1.7.8-source.tar.bz2) = 3e91b559c2ab76ba6dc1f99fca57b921660ab673
@ -36,3 +36,10 @@ SHA1 (patch-bz) = 6f854d74a9d1d1174ce8eff7d65f8024a7da4711
SHA1 (patch-ca) = 479ef14631ae019ae5ca1c08a2f786294f3e972b
SHA1 (patch-cb) = fd0f033d63be066ce5c47057d72c48a085718908
SHA1 (patch-cc) = cb08d4b7330c9e471d172c11772c840e613ceb76
SHA1 (patch-cg) = 0b637509a5dfcc1ebe26412899da41dc3d06e6df
SHA1 (patch-ch) = 281dc9957784b4f75170377d09c22735ce7f8500
SHA1 (patch-ci) = b9868757c31ea577c2df99eb7f41503d55d904f0
SHA1 (patch-cj) = a17331d248dd0d3ed85c81f6c1095f384d810b0d
SHA1 (patch-ck) = 5db42f8047046e10f388bdaf299c35c415a50f8d
SHA1 (patch-cl) = 1450e99f5e5f31f0e8d01b68bb50494f84eed068
SHA1 (patch-cm) = 2a347bcf5814816539835caf65dd888f71ceea20

View file

@ -0,0 +1,85 @@
$NetBSD: patch-cg,v 1.3 2005/06/22 22:05:34 martin Exp $
--- extensions/transformiix/source/base/Double.cpp.orig 2004-01-15 22:23:18.000000000 +0100
+++ extensions/transformiix/source/base/Double.cpp 2005-06-20 11:26:26.000000000 +0200
@@ -48,6 +48,38 @@
* Utility class for doubles
*/
+#if defined(INFINITY) && defined(NAN)
+double Double::NaN()
+{
+ return NAN;
+}
+
+double Double::PositiveInfinity()
+{
+ return INFINITY;
+}
+
+double Double::NegativeInfinity()
+{
+ return -INFINITY;
+}
+
+MBool Double::isInfinite(double aDbl)
+{
+ return isinf(aDbl);
+}
+
+MBool Double::isNaN(double aDbl)
+{
+ return isnan(aDbl);
+}
+
+MBool Double::isNeg(double aDbl)
+{
+ return aDbl<0.0;
+}
+#else /* pre INFINITY C environment */
+
//A trick to handle IEEE floating point exceptions on FreeBSD - E.D.
#ifdef __FreeBSD__
#include <ieeefp.h>
@@ -127,9 +159,20 @@
const PRUint32 negInfMask[2] = {0, TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_SIGNBIT};
#endif
-const double Double::NaN = *((double*)nanMask);
-const double Double::POSITIVE_INFINITY = *((double*)infMask);
-const double Double::NEGATIVE_INFINITY = *((double*)negInfMask);
+double Double::NaN()
+{
+ return *((double*)nanMask);
+}
+
+double Double::PositiveInfinity()
+{
+ return *((double*)infMask);
+}
+
+double Double::NegativeInfinity()
+{
+ return *((double*)negInfMask);
+}
/*
* Determines whether the given double represents positive or negative
@@ -157,6 +200,7 @@
{
return (TX_DOUBLE_HI32(aDbl) & TX_DOUBLE_HI32_SIGNBIT) != 0;
}
+#endif /* C environment has INFINITY and NAN */
/*
* Converts the given String to a double, if the String value does not
@@ -244,7 +288,7 @@
{
if (mState == eIllegal || mBuffer.IsEmpty() ||
(mBuffer.Length() == 1 && mBuffer[0] == '.')) {
- return Double::NaN;
+ return Double::NaN();
}
return mSign*PR_strtod(mBuffer.get(), 0);
}

View file

@ -0,0 +1,18 @@
$NetBSD: patch-ch,v 1.3 2005/06/22 22:05:34 martin Exp $
--- extensions/transformiix/source/base/primitives.h.orig 2003-01-17 13:43:05.000000000 +0100
+++ extensions/transformiix/source/base/primitives.h 2005-06-16 09:46:56.000000000 +0200
@@ -51,10 +51,9 @@
/*
* Usefull constants
*/
-
- static const double NaN;
- static const double POSITIVE_INFINITY;
- static const double NEGATIVE_INFINITY;
+ static double NaN();
+ static double PositiveInfinity();
+ static double NegativeInfinity();
/*
* Determines whether the given double represents positive or negative

View file

@ -0,0 +1,13 @@
$NetBSD: patch-ci,v 1.3 2005/06/22 22:05:34 martin Exp $
--- extensions/transformiix/source/xpath/FunctionCall.cpp.orig 2003-11-04 16:13:03.000000000 +0100
+++ extensions/transformiix/source/xpath/FunctionCall.cpp 2005-06-16 09:14:19.000000000 +0200
@@ -92,7 +92,7 @@
nsRefPtr<txAExprResult> exprResult;
nsresult rv = aExpr->evaluate(aContext, getter_AddRefs(exprResult));
if (NS_FAILED(rv))
- return Double::NaN;
+ return Double::NaN();
return exprResult->numberValue();
}

View file

@ -0,0 +1,32 @@
$NetBSD: patch-cj,v 1.3 2005/06/22 22:05:34 martin Exp $
--- extensions/transformiix/source/xpath/MultiplicativeExpr.cpp.orig 2003-11-20 00:06:14.000000000 +0100
+++ extensions/transformiix/source/xpath/MultiplicativeExpr.cpp 2005-06-16 09:29:24.000000000 +0200
@@ -71,22 +71,22 @@
#if defined(XP_WIN)
/* XXX MSVC miscompiles such that (NaN == 0) */
if (Double::isNaN(rightDbl))
- result = Double::NaN;
+ result = Double::NaN();
else
#endif
if (leftDbl == 0 || Double::isNaN(leftDbl))
- result = Double::NaN;
+ result = Double::NaN();
else if (Double::isNeg(leftDbl) ^ Double::isNeg(rightDbl))
- result = Double::NEGATIVE_INFINITY;
+ result = Double::NegativeInfinity();
else
- result = Double::POSITIVE_INFINITY;
+ result = Double::PositiveInfinity();
}
else
result = leftDbl / rightDbl;
break;
case MODULUS:
if (rightDbl == 0) {
- result = Double::NaN;
+ result = Double::NaN();
}
else {
#if defined(XP_WIN)

View file

@ -0,0 +1,19 @@
$NetBSD: patch-ck,v 1.3 2005/06/22 22:05:34 martin Exp $
--- extensions/transformiix/source/xslt/functions/txFormatNumberFunctionCall.cpp.orig 2003-06-17 00:31:17.000000000 +0200
+++ extensions/transformiix/source/xslt/functions/txFormatNumberFunctionCall.cpp 2005-06-16 10:06:22.000000000 +0200
@@ -112,12 +112,12 @@
return aContext->recycler()->getStringResult(format->mNaN, aResult);
}
- if (value == Double::POSITIVE_INFINITY) {
+ if (value == Double::PositiveInfinity()) {
return aContext->recycler()->getStringResult(format->mInfinity,
aResult);
}
- if (value == Double::NEGATIVE_INFINITY) {
+ if (value == Double::NegativeInfinity()) {
nsAutoString res;
res.Append(format->mMinusSign);
res.Append(format->mInfinity);

View file

@ -0,0 +1,31 @@
$NetBSD: patch-cl,v 1.3 2005/06/22 22:05:34 martin Exp $
--- extensions/transformiix/source/xslt/txStylesheetCompileHandlers.cpp.orig 2004-01-29 23:04:29.000000000 +0100
+++ extensions/transformiix/source/xslt/txStylesheetCompileHandlers.cpp 2005-06-16 09:18:13.000000000 +0200
@@ -258,7 +258,7 @@
txStylesheetCompilerState& aState,
double& aNumber)
{
- aNumber = Double::NaN;
+ aNumber = Double::NaN();
txStylesheetAttr* attr = nsnull;
nsresult rv = getStyleAttr(aAttributes, aAttrCount, kNameSpaceID_None,
aName, aRequired, &attr);
@@ -479,7 +479,7 @@
NS_ENSURE_SUCCESS(rv, rv);
txExpandedName nullExpr;
- double prio = Double::NaN;
+ double prio = Double::NaN();
nsAutoPtr<txPattern> match(new txRootPattern(MB_TRUE));
NS_ENSURE_TRUE(match, NS_ERROR_OUT_OF_MEMORY);
@@ -1038,7 +1038,7 @@
aState, mode);
NS_ENSURE_SUCCESS(rv, rv);
- double prio = Double::NaN;
+ double prio = Double::NaN();
rv = getNumberAttr(aAttributes, aAttrCount, txXSLTAtoms::priority,
PR_FALSE, aState, prio);
NS_ENSURE_SUCCESS(rv, rv);

View file

@ -0,0 +1,13 @@
$NetBSD: patch-cm,v 1.3 2005/06/22 22:05:34 martin Exp $
--- extensions/transformiix/source/xslt/txXSLTPatterns.cpp.orig 2003-11-18 23:56:46.000000000 +0100
+++ extensions/transformiix/source/xslt/txXSLTPatterns.cpp 2005-06-16 09:17:00.000000000 +0200
@@ -99,7 +99,7 @@
double txUnionPattern::getDefaultPriority()
{
NS_ASSERTION(0, "Don't call getDefaultPriority on txUnionPattern");
- return Double::NaN;
+ return Double::NaN();
}
/*