Author: Manuel Jacob
Branch: remove-remaining-smm
Changeset: r69330:a2d089c94859
Date: 2014-02-24 03:41 +0100
http://bitbucket.org/pypy/pypy/changeset/a2d089c94859/

Log:    Kill last float SMMs.

diff --git a/pypy/objspace/std/floatobject.py b/pypy/objspace/std/floatobject.py
--- a/pypy/objspace/std/floatobject.py
+++ b/pypy/objspace/std/floatobject.py
@@ -9,7 +9,7 @@
 from pypy.objspace.std.longobject import W_LongObject
 from pypy.objspace.std.model import registerimplementation, W_Object
 from pypy.objspace.std.register_all import register_all
-from pypy.objspace.std.stdtypedef import StdTypeDef, SMM
+from pypy.objspace.std.stdtypedef import StdTypeDef
 from rpython.rlib import rarithmetic, rfloat
 from rpython.rlib.rarithmetic import ovfcheck_float_to_int, intmask, LONG_BIT
 from rpython.rlib.rfloat import (
@@ -20,11 +20,6 @@
 from rpython.rlib.unroll import unrolling_iterable
 
 
-float_as_integer_ratio = SMM("as_integer_ratio", 1)
-float_is_integer = SMM("is_integer", 1)
-float_hex = SMM("hex", 1)
-
-
 def detect_floatformat():
     from rpython.rtyper.lltypesystem import rffi, lltype
     buf = lltype.malloc(rffi.CCHARP.TO, 8, flavor='raw')
@@ -574,15 +569,70 @@
             return space.w_NotImplemented
         return w_lhs.descr_pow(space, self, w_third_arg)
 
-    def descr_conjugate(self, space):
-        return space.float(self)
-
     def descr_get_real(self, space):
         return space.float(self)
 
     def descr_get_imag(self, space):
         return space.wrap(0.0)
 
+    def descr_conjugate(self, space):
+        return space.float(self)
+
+    def descr_is_integer(self, space):
+        v = self.floatval
+        if not rfloat.isfinite(v):
+            return space.w_False
+        return space.wrap(math.floor(v) == v)
+
+    def descr_as_integer_ratio(self, space):
+        value = self.floatval
+        try:
+            num, den = float_as_rbigint_ratio(value)
+        except OverflowError:
+            w_msg = space.wrap("cannot pass infinity to as_integer_ratio()")
+            raise OperationError(space.w_OverflowError, w_msg)
+        except ValueError:
+            w_msg = space.wrap("cannot pass nan to as_integer_ratio()")
+            raise OperationError(space.w_ValueError, w_msg)
+
+        w_num = space.newlong_from_rbigint(num)
+        w_den = space.newlong_from_rbigint(den)
+        # Try to return int
+        return space.newtuple([space.int(w_num), space.int(w_den)])
+
+    def descr_hex(self, space):
+        value = self.floatval
+        if not isfinite(value):
+            return self.descr_str(space)
+        if value == 0.0:
+            if copysign(1., value) == -1.:
+                return space.wrap("-0x0.0p+0")
+            else:
+                return space.wrap("0x0.0p+0")
+        mant, exp = math.frexp(value)
+        shift = 1 - max(rfloat.DBL_MIN_EXP - exp, 0)
+        mant = math.ldexp(mant, shift)
+        mant = abs(mant)
+        exp -= shift
+        result = ['\0'] * ((TOHEX_NBITS - 1) // 4 + 2)
+        result[0] = _char_from_hex(int(mant))
+        mant -= int(mant)
+        result[1] = "."
+        for i in range((TOHEX_NBITS - 1) // 4):
+            mant *= 16.0
+            result[i + 2] = _char_from_hex(int(mant))
+            mant -= int(mant)
+        if exp < 0:
+            sign = "-"
+        else:
+            sign = "+"
+        exp = abs(exp)
+        s = ''.join(result)
+        if value < 0.0:
+            return space.wrap("-0x%sp%s%d" % (s, sign, exp))
+        else:
+            return space.wrap("0x%sp%s%d" % (s, sign, exp))
+
 
 registerimplementation(W_FloatObject)
 
@@ -634,9 +684,12 @@
     __pow__ = interp2app(W_FloatObject.descr_pow),
     __rpow__ = interp2app(W_FloatObject.descr_rpow),
 
-    conjugate = interp2app(W_FloatObject.descr_conjugate),
     real = GetSetProperty(W_FloatObject.descr_get_real),
     imag = GetSetProperty(W_FloatObject.descr_get_imag),
+    conjugate = interp2app(W_FloatObject.descr_conjugate),
+    is_integer = interp2app(W_FloatObject.descr_is_integer),
+    as_integer_ratio = interp2app(W_FloatObject.descr_as_integer_ratio),
+    hex = interp2app(W_FloatObject.descr_hex),
 )
 W_FloatObject.typedef.registermethods(globals())
 
@@ -646,39 +699,6 @@
 
 TOHEX_NBITS = rfloat.DBL_MANT_DIG + 3 - (rfloat.DBL_MANT_DIG + 2) % 4
 
-def float_hex__Float(space, w_float):
-    value = w_float.floatval
-    if not isfinite(value):
-        return w_float.descr_str(space)
-    if value == 0.0:
-        if copysign(1., value) == -1.:
-            return space.wrap("-0x0.0p+0")
-        else:
-            return space.wrap("0x0.0p+0")
-    mant, exp = math.frexp(value)
-    shift = 1 - max(rfloat.DBL_MIN_EXP - exp, 0)
-    mant = math.ldexp(mant, shift)
-    mant = abs(mant)
-    exp -= shift
-    result = ['\0'] * ((TOHEX_NBITS - 1) // 4 + 2)
-    result[0] = _char_from_hex(int(mant))
-    mant -= int(mant)
-    result[1] = "."
-    for i in range((TOHEX_NBITS - 1) // 4):
-        mant *= 16.0
-        result[i + 2] = _char_from_hex(int(mant))
-        mant -= int(mant)
-    if exp < 0:
-        sign = "-"
-    else:
-        sign = "+"
-    exp = abs(exp)
-    s = ''.join(result)
-    if value < 0.0:
-        return space.wrap("-0x%sp%s%d" % (s, sign, exp))
-    else:
-        return space.wrap("0x%sp%s%d" % (s, sign, exp))
-
 def float2string(x, code, precision):
     # we special-case explicitly inf and nan here
     if isfinite(x):
@@ -873,26 +893,4 @@
     return z
 
 
-def float_as_integer_ratio__Float(space, w_float):
-    value = w_float.floatval
-    try:
-        num, den = float_as_rbigint_ratio(value)
-    except OverflowError:
-        w_msg = space.wrap("cannot pass infinity to as_integer_ratio()")
-        raise OperationError(space.w_OverflowError, w_msg)
-    except ValueError:
-        w_msg = space.wrap("cannot pass nan to as_integer_ratio()")
-        raise OperationError(space.w_ValueError, w_msg)
-
-    w_num = space.newlong_from_rbigint(num)
-    w_den = space.newlong_from_rbigint(den)
-    # Try to return int
-    return space.newtuple([space.int(w_num), space.int(w_den)])
-
-def float_is_integer__Float(space, w_float):
-    v = w_float.floatval
-    if not rfloat.isfinite(v):
-        return space.w_False
-    return space.wrap(math.floor(v) == v)
-
 register_all(vars(), globals())
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to