Reviewed by Darin.
authorap <ap@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 3 Nov 2006 22:12:18 +0000 (22:12 +0000)
committerap <ap@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 3 Nov 2006 22:12:18 +0000 (22:12 +0000)
        http://bugs.webkit.org/show_bug.cgi?id=11504
        Fix warnings on non 32 bit platforms

        * kjs/JSImmediate.h:
        (KJS::JSImmediate::NanAsBits):
        (KJS::JSImmediate::oneAsBits):
        Rewrite in a way that moves runtime checks to compile-time.

        (KJS::):
        (KJS::JSImmediate::fromDouble):
        (KJS::JSImmediate::toDouble):

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

JavaScriptCore/ChangeLog
JavaScriptCore/kjs/JSImmediate.h

index e32e195251fbe8119fd868c2e1d0552f243259e9..143e25d1db8069ecccd4760f6a5c27f16ccb24be 100644 (file)
@@ -1,3 +1,19 @@
+2006-11-03  Alexey Proskuryakov  <ap@nypop.com>
+
+        Reviewed by Darin.
+
+        http://bugs.webkit.org/show_bug.cgi?id=11504
+        Fix warnings on non 32 bit platforms
+
+        * kjs/JSImmediate.h:
+        (KJS::JSImmediate::NanAsBits):
+        (KJS::JSImmediate::oneAsBits):
+        Rewrite in a way that moves runtime checks to compile-time.
+
+        (KJS::):
+        (KJS::JSImmediate::fromDouble):
+        (KJS::JSImmediate::toDouble):
+
 2006-11-02  George Staikos <staikos@kde.org>
 
         Reviewed by Maciej.
index 5705c27c030fe193cb5ab01c1105b92f1dd63155..82b53c2613ff76b5708792c18229d38f65484425 100644 (file)
@@ -43,6 +43,22 @@ class JSObject;
 class JSValue;
 class UString;
 
+template<bool for32bit, bool for64bit> struct NanAsBitsValue {};
+template<> struct NanAsBitsValue<true, false> {
+    enum { value = 0x7fc00000 };
+};
+template<> struct NanAsBitsValue<false, true> {
+    enum { value = 0x7ff80000ULL << 32 };
+};
+
+template<bool for32bit, bool for64bit> struct oneAsBitsValue {};
+template<> struct oneAsBitsValue<true, false> {
+    enum { value = 0x3f800000 };
+};
+template<> struct oneAsBitsValue<false, true> {
+    enum { value = 0x3ff00000ULL << 32 };
+};
+
 /*
  * A JSValue * is either a pointer to a cell (a heap-allocated object) or an immediate (a type-tagged 
  * IEEE floating point bit pattern masquerading as a pointer). The low two bits in a JSValue * are available 
@@ -90,7 +106,7 @@ public:
 
     static JSValue *fromDouble(double d)
     {
-        if (is32bit()) {
+        if (is32bit) {
             FloatUnion floatUnion;
             floatUnion.asFloat = d;
             
@@ -106,7 +122,7 @@ public:
                 return 0;
             
             return tag(floatUnion.asBits, NumberType);
-        } else if (is64bit()) {
+        } else if (is64bit) {
             DoubleUnion doubleUnion;
             doubleUnion.asDouble = d;
             
@@ -126,11 +142,11 @@ public:
     {
         ASSERT(isImmediate(v));
         
-        if (is32bit()) {
+        if (is32bit) {
             FloatUnion floatUnion;
             floatUnion.asBits = unTag(v);
             return floatUnion.asFloat;
-        } else if (is64bit()) {
+        } else if (is64bit) {
             DoubleUnion doubleUnion;
             doubleUnion.asBits = unTag(v);
             return doubleUnion.asDouble;
@@ -194,30 +210,16 @@ private:
     };
 
     // we support 32-bit platforms with sizes like this
-    static bool is32bit() 
-    {
-        return sizeof(float) == sizeof(uint32_t) && sizeof(double) == sizeof(uint64_t) && sizeof(uintptr_t) == sizeof(uint32_t);
-    }
+    static const bool is32bit = 
+        sizeof(float) == sizeof(uint32_t) && sizeof(double) == sizeof(uint64_t) && sizeof(uintptr_t) == sizeof(uint32_t);
 
     // we support 64-bit platforms with sizes like this
-    static bool is64bit()
-    {
-        return sizeof(float) == sizeof(uint32_t) && sizeof(double) == sizeof(uint64_t) && sizeof(uintptr_t) == sizeof(uint64_t);
-    }
+    static const bool is64bit =
+        sizeof(float) == sizeof(uint32_t) && sizeof(double) == sizeof(uint64_t) && sizeof(uintptr_t) == sizeof(uint64_t);
 
     static uintptr_t NanAsBits()
     {
-        const uint32_t NaN32AsBits = 0x7fc00000;
-        const uint64_t NaN64AsBits = 0x7ff80000ULL << 32;
-
-        if (is32bit())
-            return NaN32AsBits;
-        else if (is64bit())
-            return NaN64AsBits;
-        else {
-            abort();
-            return 0;
-        }
+        return NanAsBitsValue<is32bit, is64bit>::value;
     }
 
     static uintptr_t zeroAsBits()
@@ -227,17 +229,7 @@ private:
 
     static uintptr_t oneAsBits()
     {
-        const uint32_t One32AsBits = 0x3f800000;
-        const uint64_t One64AsBits = 0x3ff00000ULL << 32;
-
-        if (is32bit())
-            return One32AsBits;
-        else if (is64bit())
-            return One64AsBits;
-        else {
-            abort();
-            return 0;
-        }
+        return oneAsBitsValue<is32bit, is64bit>::value;
     }
 };