patches/spidermonkey-01-js-ctypes.diff
author yippi
Sat, 22 Oct 2011 01:00:00 +0000
changeset 3902 66caadcb64c4
permissions -rw-r--r--
2011-10-22 Brian Cameron <[email protected]> * SFEgnome-shell.spec, patches/gnome-shell-01-compile.diff: Bump to 3.2.1. * SFEgnome-shell-extensions.spec: Bump to 3.2.0. * SFEcaribou.spec: Add new spec, version 0.4.1. * SFEspidermonkey.spec, patches/spidermonkey-01-js-ctypes.diff, patches/spidermonkey-02-jsfunc.diff, patches/spidermonkey-03-methodjit-sparc.diff, patches/spidermonkey-04-jemalloc.diff, patches/spidermonkey-05-pgo-ss12_2.diff, patches/spidermonkey-06-use-system-libffi.diff, patches/spidermonkey-07-makefile.diff: Add spec-file for the Mozilla SpiderMonkey JavaScript Engine (js185). * SFEmutter.spec, patches/mutter-03-compile.diff: Bump to 3.2.1. * SFEgjs.spec, patches/gjs-01-solaris.diff: Bump to 1.30.0. Rework patch. * base-specs/telepathy-glib.spec: Bump to 0.16.0.

diff --git a/js/src/ctypes/CTypes.cpp b/js/src/ctypes/CTypes.cpp
index 763d6e6..8b04fc8 100644
--- a/js/src/ctypes/CTypes.cpp
+++ b/js/src/ctypes/CTypes.cpp
@@ -1023,6 +1023,19 @@ static JS_ALWAYS_INLINE TargetType Convert(FromType d)
   return ConvertImpl<TargetType, FromType>::Convert(d);
 }
 
+template<class Type>
+class no_bug_numeric_digits
+{
+  public:
+    static const int digits = numeric_limits<Type>::digits;
+};
+template<>
+class no_bug_numeric_digits<unsigned long long>
+{
+  public:
+    static const int digits = 64;
+};
+
 template<class TargetType, class FromType>
 static JS_ALWAYS_INLINE bool IsAlwaysExact()
 {
@@ -1035,7 +1048,7 @@ static JS_ALWAYS_INLINE bool IsAlwaysExact()
   // 2) If FromType is signed, TargetType must also be signed. (Floating point
   //    types are always signed.)
   // 3) If TargetType is an exact integral type, FromType must be also.
-  if (numeric_limits<TargetType>::digits < numeric_limits<FromType>::digits)
+  if (numeric_limits<TargetType>::digits < no_bug_numeric_digits<FromType>::digits)
     return false;
 
   if (numeric_limits<FromType>::is_signed &&