Reviewed by Maciej.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 5 Jul 2006 04:13:32 +0000 (04:13 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 5 Jul 2006 04:13:32 +0000 (04:13 +0000)
        Tweaked a bit by Darin.

        - http://bugzilla.opendarwin.org/show_bug.cgi?id=9678
          work around MSVCRT's fmod function returning NaN for fmod(x, infinity) instead of x

        * wtf/MathExtras.h: Added include of <float.h>.
        (isinf): Fix to return false for NAN.
        (wtf_fmod): Added. An inline that works around the bug.

        * kjs/nodes.cpp:
        * kjs/number_object.cpp:
        * kjs/operations.cpp:
        * kjs/value.cpp:
        Added includes of MathExtras.h to all files using fmod.

        * JavaScriptCore.xcodeproj/project.pbxproj: Let Xcode 2.3 have its way with
        the project.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@15155 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JavaScriptCore/ChangeLog
JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
JavaScriptCore/kjs/nodes.cpp
JavaScriptCore/kjs/number_object.cpp
JavaScriptCore/kjs/operations.cpp
JavaScriptCore/kjs/value.cpp
JavaScriptCore/wtf/MathExtras.h

index 47605155fab4e80e829c55d29be14e842ee61418..f96bae70ee36819c9d7bc8b371ed52d72018cefb 100644 (file)
@@ -1,3 +1,24 @@
+2006-07-04  Bjoern Graf  <bjoern.graf@gmail.com>
+
+        Reviewed by Maciej.
+        Tweaked a bit by Darin.
+
+        - http://bugzilla.opendarwin.org/show_bug.cgi?id=9678
+          work around MSVCRT's fmod function returning NaN for fmod(x, infinity) instead of x
+
+        * wtf/MathExtras.h: Added include of <float.h>.
+        (isinf): Fix to return false for NAN.
+        (wtf_fmod): Added. An inline that works around the bug.
+
+        * kjs/nodes.cpp:
+        * kjs/number_object.cpp:
+        * kjs/operations.cpp:
+        * kjs/value.cpp:
+        Added includes of MathExtras.h to all files using fmod.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj: Let Xcode 2.3 have its way with
+        the project.
+
 2006-07-01  Geoffrey Garen  <ggaren@apple.com>
 
         Reviewed by Darin.
index 536cfc239c05138fdce898dfa2bee53966908e69..79f9e0eb8558b4c864cc31696fcfe1379415953e 100644 (file)
                E195679909E7CF1200B89D13 /* UnicodeCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = E195679509E7CF1200B89D13 /* UnicodeCategory.h */; };
 /* End PBXBuildFile section */
 
-/* Begin PBXBuildStyle section */
-               14C137130A560E70006CA9AF /* Development */ = {
-                       isa = PBXBuildStyle;
-                       buildSettings = {
-                               COPY_PHASE_STRIP = NO;
-                       };
-                       name = Development;
-               };
-               14C137140A560E70006CA9AF /* Deployment */ = {
-                       isa = PBXBuildStyle;
-                       buildSettings = {
-                               COPY_PHASE_STRIP = YES;
-                       };
-                       name = Deployment;
-               };
-/* End PBXBuildStyle section */
-
 /* Begin PBXContainerItemProxy section */
                141211350A48796100480255 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                0867D690FE84028FC02AAC07 /* Project object */ = {
                        isa = PBXProject;
                        buildConfigurationList = 149C277108902AFE008A9EFC /* Build configuration list for PBXProject "JavaScriptCore" */;
-                       buildSettings = {
-                       };
-                       buildStyles = (
-                               14C137130A560E70006CA9AF /* Development */,
-                               14C137140A560E70006CA9AF /* Deployment */,
-                       );
                        hasScannedForEncodings = 1;
                        mainGroup = 0867D691FE84028FC02AAC07 /* JavaScriptCore */;
                        productRefGroup = 034768DFFF38A50411DB9C8B /* Products */;
index 3dce9dcd355f9faa9f8733c3004b9fcb91da4f85..9e44d49bc904ae7b55f5855ba305cf4cc64f3b64 100644 (file)
@@ -38,6 +38,7 @@
 #include "reference_list.h"
 #include <wtf/HashSet.h>
 #include <wtf/HashCountedSet.h>
+#include <wtf/MathExtras.h>
 
 using namespace KJS;
 
index c544925997c5f88359f1e584f63dc78f1c1b24ae..dce5227bf76842d19e85ea4f6c5dcb0d486beeb3 100644 (file)
@@ -26,8 +26,8 @@
 #include "dtoa.h"
 #include "error_object.h"
 #include "operations.h"
+#include <wtf/MathExtras.h>
 #include <wtf/Vector.h>
-#include <math.h>
 
 using namespace KJS;
 
index b5d88a5d5309d3a036a66014799f988422a93b83..071a1d11796a460f2a4d5aca4e5f9dd85de7b6f4 100644 (file)
 #include "config.h"
 #include "operations.h"
 
+#include "object.h"
 #include <math.h>
 #include <stdio.h>
+#include <wtf/MathExtras.h>
 
 #if HAVE(FUNC_ISINF) && HAVE(IEEEFP_H)
 #include <ieeefp.h>
 #include <float.h>
 #endif
 
-#include "object.h"
-
 namespace KJS {
     
 #if !PLATFORM(DARWIN)
-// FIXME: should probably be inlined on other platforms too, and controlled exclusively
-// by HAVE macros
-    
-    
+
+// FIXME: Should probably be inlined on non-Darwin platforms too, and controlled exclusively
+// by HAVE macros rather than PLATFORM.
+
+// FIXME: Merge with isnan in MathExtras.h and remove this one entirely.
 bool isNaN(double d)
 {
 #if HAVE(FUNC_ISNAN)
@@ -54,6 +55,7 @@ bool isNaN(double d)
 #endif
 }
 
+// FIXME: Merge with isinf in MathExtras.h and remove this one entirely.
 bool isInf(double d)
 {
     // FIXME: should be HAVE(_FPCLASS)
index 1712d485474271ee8f6de6a2c4b574cb043ba407..85a8a2f11a06b58b0f6e3e31ddec45946e36eaea 100644 (file)
 #include "config.h"
 #include "value.h"
 
-#include <math.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "operations.h"
 #include "error_object.h"
 #include "nodes.h"
+#include "operations.h"
+#include <stdio.h>
+#include <string.h>
+#include <wtf/MathExtras.h>
 
 namespace KJS {
 
index 56e1536ab7bd3ef1b814ebe3d2c835b924dfe786..ae3eece5cde7beb54bf2a015c6cf4dc135bac74b 100644 (file)
 
 #include <xmath.h>
 
-inline bool isinf(double num) { return !_finite(num); }
+#if HAVE(FLOAT_H)
+#include <float.h>
+#endif
+
+inline bool isinf(double num) { return !_finite(num) && !_isnan(num); }
 inline bool isnan(double num) { return _isnan(num); }
 inline long lround(double num) { return num > 0 ? num + 0.5 : ceil(num - 0.5); }
 inline long lroundf(float num) { return num > 0 ? num + 0.5f : ceilf(num - 0.5f); }
@@ -37,4 +41,11 @@ inline double round(double num) { return num > 0 ? floor(num + 0.5) : ceil(num -
 inline float roundf(float num) { return num > 0 ? floorf(num + 0.5f) : ceilf(num - 0.5f); }
 inline bool signbit(double num) { return _copysign(1.0, num) < 0; }
 
+#if PLATFORM(WIN) && COMPILER(MSVC)
+
+// Work around a bug in the Microsoft CRT, where fmod(x, +-infinity) yields NaN instead of x.
+inline double wtf_fmod(double x, double y) { return (!isinf(x) && isinf(y)) ? x : fmod(x, y); }
+
+#define fmod(x, y) wtf_fmod(x, y)
+
 #endif