[pypy-svn] r75944 - in pypy/branch/fast-forward/pypy: module/sys objspace/std rlib

benjamin at codespeak.net benjamin at codespeak.net
Wed Jul 7 00:59:09 CEST 2010


Author: benjamin
Date: Wed Jul  7 00:59:07 2010
New Revision: 75944

Added:
   pypy/branch/fast-forward/pypy/rlib/rfloat.py   (contents, props changed)
Modified:
   pypy/branch/fast-forward/pypy/module/sys/system.py
   pypy/branch/fast-forward/pypy/objspace/std/floatobject.py
   pypy/branch/fast-forward/pypy/objspace/std/floattype.py
Log:
move float constants to rfloat.py

Modified: pypy/branch/fast-forward/pypy/module/sys/system.py
==============================================================================
--- pypy/branch/fast-forward/pypy/module/sys/system.py	(original)
+++ pypy/branch/fast-forward/pypy/module/sys/system.py	Wed Jul  7 00:59:07 2010
@@ -1,26 +1,6 @@
 """Information about the current system."""
-
 from pypy.interpreter import gateway
-
-from pypy.rpython.tool import rffi_platform
-from pypy.translator.tool.cbuild import ExternalCompilationInfo
-
-
-class CConfig:
-    _compilation_info_ = ExternalCompilationInfo(includes=["float.h"])
-
-float_constants = ["DBL_MAX", "DBL_MIN", "DBL_EPSILON"]
-int_constants = ["DBL_MAX_EXP", "DBL_MAX_10_EXP",
-                 "DBL_MIN_EXP", "DBL_MIN_10_EXP",
-                 "DBL_DIG", "DBL_MANT_DIG",
-                 "FLT_RADIX", "FLT_ROUNDS"]
-for const in float_constants:
-    setattr(CConfig, const, rffi_platform.DefinedConstantDouble(const))
-for const in int_constants:
-    setattr(CConfig, const, rffi_platform.DefinedConstantInteger(const))
-del float_constants, int_constants, const
-
-globals().update(rffi_platform.configure(CConfig))
+from pypy.rlib import rfloat
 
 
 app = gateway.applevel("""
@@ -45,17 +25,17 @@
 
 def get_float_info(space):
     info_w = [
-        space.wrap(DBL_MAX),
-        space.wrap(DBL_MAX_EXP),
-        space.wrap(DBL_MAX_10_EXP),
-        space.wrap(DBL_MIN),
-        space.wrap(DBL_MIN_EXP),
-        space.wrap(DBL_MIN_10_EXP),
-        space.wrap(DBL_DIG),
-        space.wrap(DBL_MANT_DIG),
-        space.wrap(DBL_EPSILON),
-        space.wrap(FLT_RADIX),
-        space.wrap(FLT_ROUNDS),
+        space.wrap(rfloat.DBL_MAX),
+        space.wrap(rfloat.DBL_MAX_EXP),
+        space.wrap(rfloat.DBL_MAX_10_EXP),
+        space.wrap(rfloat.DBL_MIN),
+        space.wrap(rfloat.DBL_MIN_EXP),
+        space.wrap(rfloat.DBL_MIN_10_EXP),
+        space.wrap(rfloat.DBL_DIG),
+        space.wrap(rfloat.DBL_MANT_DIG),
+        space.wrap(rfloat.DBL_EPSILON),
+        space.wrap(rfloat.FLT_RADIX),
+        space.wrap(rfloat.FLT_ROUNDS),
     ]
     w_float_info = app.wget(space, "float_info")
     return space.call_function(w_float_info, space.newtuple(info_w))

Modified: pypy/branch/fast-forward/pypy/objspace/std/floatobject.py
==============================================================================
--- pypy/branch/fast-forward/pypy/objspace/std/floatobject.py	(original)
+++ pypy/branch/fast-forward/pypy/objspace/std/floatobject.py	Wed Jul  7 00:59:07 2010
@@ -8,11 +8,11 @@
 from pypy.objspace.std.register_all import register_all
 from pypy.objspace.std.noneobject import W_NoneObject
 from pypy.objspace.std.longobject import W_LongObject
-from pypy.module.sys import system
 from pypy.rlib.rarithmetic import ovfcheck_float_to_int, intmask, isinf, isnan
 from pypy.rlib.rarithmetic import formatd, LONG_BIT, FL_MAXINT, FL_MININT
 from pypy.rlib.rbigint import rbigint
 from pypy.rlib.objectmodel import we_are_translated
+from pypy.rlib import rfloat
 from pypy.tool.sourcetools import func_with_new_name
 
 import math
@@ -92,7 +92,7 @@
 def _char_from_hex(number):
     return "0123456789abcdef"[number]
 
-TOHEX_NBITS = system.DBL_MANT_DIG + 3 - (system.DBL_MANT_DIG + 2) % 4
+TOHEX_NBITS = rfloat.DBL_MANT_DIG + 3 - (rfloat.DBL_MANT_DIG + 2) % 4
 
 def float_hex__Float(space, w_float):
     value = w_float.floatval
@@ -104,7 +104,7 @@
         else:
             return space.wrap("0x0.0p+0")
     mant, exp = math.frexp(value)
-    shift = 1 - max(system.DBL_MIN_EXP - exp, 0)
+    shift = 1 - max(rfloat.DBL_MIN_EXP - exp, 0)
     mant = math.ldexp(mant, shift)
     mant = abs(mant)
     exp -= shift

Modified: pypy/branch/fast-forward/pypy/objspace/std/floattype.py
==============================================================================
--- pypy/branch/fast-forward/pypy/objspace/std/floattype.py	(original)
+++ pypy/branch/fast-forward/pypy/objspace/std/floattype.py	Wed Jul  7 00:59:07 2010
@@ -1,13 +1,13 @@
 import math
 import sys
 from pypy.rlib.unroll import unrolling_iterable
+from pypy.rlib import rfloat
 from pypy.interpreter import gateway
 from pypy.interpreter.baseobjspace import ObjSpace, W_Root
 from pypy.interpreter.error import OperationError
 from pypy.objspace.std.stdtypedef import StdTypeDef, SMM
 from pypy.objspace.std.strutil import ParseStringError
 from pypy.objspace.std.strutil import interp_string_to_float
-from pypy.module.sys import system
 
 
 float_as_integer_ratio = SMM("as_integer_ratio", 1)
@@ -127,8 +127,8 @@
         if not total_digits:
             raise OperationError(space.w_ValueError,
                                  space.wrap("invalid hex string"))
-        const_one = system.DBL_MIN_EXP - system.DBL_MANT_DIG + sys.maxint // 2
-        const_two = sys.maxint // 2 + 1 - system.DBL_MAX_EXP
+        const_one = rfloat.DBL_MIN_EXP - rfloat.DBL_MANT_DIG + sys.maxint // 2
+        const_two = sys.maxint // 2 + 1 - rfloat.DBL_MAX_EXP
         if total_digits > min(const_one, const_two) // 4:
             raise OperationError(space.w_ValueError, space.wrap("way too long"))
         if i < length and (s[i] == "p" or s[i] == "P"):
@@ -165,13 +165,13 @@
             while digit:
                 top_exp += 1
                 digit //= 2
-            if top_exp < system.DBL_MIN_EXP - system.DBL_MANT_DIG:
+            if top_exp < rfloat.DBL_MIN_EXP - rfloat.DBL_MANT_DIG:
                 value = 0.0
-            elif top_exp > system.DBL_MAX_EXP:
+            elif top_exp > rfloat.DBL_MAX_EXP:
                 raise OperationError(space.w_OverflowError,
                                      space.wrap("too large"))
             else:
-                lsb = max(top_exp, system.DBL_MIN_EXP) - system.DBL_MANT_DIG
+                lsb = max(top_exp, rfloat.DBL_MIN_EXP) - rfloat.DBL_MANT_DIG
                 value = 0
                 if exp >= lsb:
                     for j in range(total_digits - 1, -1, -1):
@@ -199,8 +199,8 @@
                                     break
                         if round_up:
                             value += 2 * half_eps
-                            mant_dig = system.DBL_MANT_DIG
-                            if (top_exp == system.DBL_MAX_EXP and
+                            mant_dig = rfloat.DBL_MANT_DIG
+                            if (top_exp == rfloat.DBL_MAX_EXP and
                                 value == math.ldexp(2 * half_eps, mant_dig)):
                                 raise OperationError(space.w_OverflowError,
                                                      space.wrap("too large"))

Added: pypy/branch/fast-forward/pypy/rlib/rfloat.py
==============================================================================
--- (empty file)
+++ pypy/branch/fast-forward/pypy/rlib/rfloat.py	Wed Jul  7 00:59:07 2010
@@ -0,0 +1,21 @@
+"""Float constants"""
+
+from pypy.rpython.tool import rffi_platform
+from pypy.translator.tool.cbuild import ExternalCompilationInfo
+
+
+class CConfig:
+    _compilation_info_ = ExternalCompilationInfo(includes=["float.h"])
+
+float_constants = ["DBL_MAX", "DBL_MIN", "DBL_EPSILON"]
+int_constants = ["DBL_MAX_EXP", "DBL_MAX_10_EXP",
+                 "DBL_MIN_EXP", "DBL_MIN_10_EXP",
+                 "DBL_DIG", "DBL_MANT_DIG",
+                 "FLT_RADIX", "FLT_ROUNDS"]
+for const in float_constants:
+    setattr(CConfig, const, rffi_platform.DefinedConstantDouble(const))
+for const in int_constants:
+    setattr(CConfig, const, rffi_platform.DefinedConstantInteger(const))
+del float_constants, int_constants, const
+
+globals().update(rffi_platform.configure(CConfig))



More information about the Pypy-commit mailing list