[pypy-commit] pypy remove-remaining-smm: Kill float's unary SMMs.
Manuel Jacob
noreply at buildbot.pypy.org
Mon Feb 24 04:10:17 CET 2014
Author: Manuel Jacob
Branch: remove-remaining-smm
Changeset: r69328:ccf5419c3a76
Date: 2014-02-24 03:22 +0100
http://bitbucket.org/pypy/pypy/changeset/ccf5419c3a76/
Log: Kill float's unary 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
@@ -3,7 +3,7 @@
import sys
from pypy.interpreter.error import OperationError, oefmt
-from pypy.interpreter.gateway import interp2app, unwrap_spec, WrappedDefault, interpindirect2app
+from pypy.interpreter.gateway import interp2app, unwrap_spec, WrappedDefault
from pypy.interpreter.typedef import GetSetProperty
from pypy.objspace.std import newformat
from pypy.objspace.std.longobject import W_LongObject
@@ -358,12 +358,65 @@
if space.isinstance_w(w_obj, space.w_long):
return W_FloatObject(w_obj.tofloat(space))
+ def descr_repr(self, space):
+ return space.wrap(float2string(self.floatval, 'r', 0))
+
+ def descr_str(self, space):
+ return space.wrap(float2string(self.floatval, 'g', DTSF_STR_PRECISION))
+
+ def descr_hash(self, space):
+ return space.wrap(_hash_float(space, self.floatval))
+
+ def descr_format(self, space, w_spec):
+ return newformat.run_formatter(space, w_spec, "format_float", self)
+
def descr_coerce(self, space, w_other):
w_other = self._to_float(space, w_other)
if w_other is None:
return space.w_NotImplemented
return space.newtuple([self, w_other])
+ def descr_nonzero(self, space):
+ return space.newbool(self.floatval != 0.0)
+
+ def descr_float(self, space):
+ if space.is_w(space.type(self), space.w_float):
+ return self
+ a = self.floatval
+ return W_FloatObject(a)
+
+ def descr_long(self, space):
+ try:
+ return W_LongObject.fromfloat(space, self.floatval)
+ except OverflowError:
+ raise OperationError(
+ space.w_OverflowError,
+ space.wrap("cannot convert float infinity to integer"))
+ except ValueError:
+ raise OperationError(space.w_ValueError,
+ space.wrap("cannot convert float NaN to integer"))
+
+ def descr_trunc(self, space):
+ whole = math.modf(self.floatval)[1]
+ try:
+ value = ovfcheck_float_to_int(whole)
+ except OverflowError:
+ return self.descr_long(space)
+ else:
+ return space.newint(value)
+
+ def descr_neg(self, space):
+ return W_FloatObject(-self.floatval)
+
+ def descr_pos(self, space):
+ return self.descr_float(space)
+
+ def descr_abs(self, space):
+ return W_FloatObject(abs(self.floatval))
+
+ def descr_getnewargs(self, space):
+ return space.newtuple([self.descr_float(space)])
+
descr_eq = make_compare_func('eq')
descr_ne = make_compare_func('ne')
descr_lt = make_compare_func('lt')
@@ -540,7 +593,20 @@
__new__ = interp2app(W_FloatObject.descr__new__),
__getformat__ = interp2app(W_FloatObject.descr___getformat__, as_classmethod=True),
fromhex = interp2app(W_FloatObject.descr_fromhex, as_classmethod=True),
+ __repr__ = interp2app(W_FloatObject.descr_repr),
+ __str__ = interp2app(W_FloatObject.descr_str),
+ __hash__ = interp2app(W_FloatObject.descr_hash),
+ __format__ = interp2app(W_FloatObject.descr_format),
__coerce__ = interp2app(W_FloatObject.descr_coerce),
+ __nonzero__ = interp2app(W_FloatObject.descr_nonzero),
+ __int__ = interp2app(W_FloatObject.int),
+ __float__ = interp2app(W_FloatObject.descr_float),
+ __long__ = interp2app(W_FloatObject.descr_long),
+ __trunc__ = interp2app(W_FloatObject.descr_trunc),
+ __neg__ = interp2app(W_FloatObject.descr_neg),
+ __pos__ = interp2app(W_FloatObject.descr_pos),
+ __abs__ = interp2app(W_FloatObject.descr_abs),
+ __getnewargs__ = interp2app(W_FloatObject.descr_getnewargs),
__eq__ = interp2app(W_FloatObject.descr_eq),
__ne__ = interp2app(W_FloatObject.descr_ne),
@@ -571,40 +637,10 @@
conjugate = interp2app(W_FloatObject.descr_conjugate),
real = GetSetProperty(W_FloatObject.descr_get_real),
imag = GetSetProperty(W_FloatObject.descr_get_imag),
- __int__ = interpindirect2app(W_FloatObject.int),
)
W_FloatObject.typedef.registermethods(globals())
-# float__Float is supposed to do nothing, unless it has
-# a derived float object, where it should return
-# an exact one.
-def float__Float(space, w_float1):
- if space.is_w(space.type(w_float1), space.w_float):
- return w_float1
- a = w_float1.floatval
- return W_FloatObject(a)
-
-def long__Float(space, w_floatobj):
- try:
- return W_LongObject.fromfloat(space, w_floatobj.floatval)
- except OverflowError:
- raise OperationError(
- space.w_OverflowError,
- space.wrap("cannot convert float infinity to integer"))
- except ValueError:
- raise OperationError(space.w_ValueError,
- space.wrap("cannot convert float NaN to integer"))
-
-def trunc__Float(space, w_floatobj):
- whole = math.modf(w_floatobj.floatval)[1]
- try:
- value = ovfcheck_float_to_int(whole)
- except OverflowError:
- return long__Float(space, w_floatobj)
- else:
- return space.newint(value)
-
def _char_from_hex(number):
return "0123456789abcdef"[number]
@@ -613,7 +649,7 @@
def float_hex__Float(space, w_float):
value = w_float.floatval
if not isfinite(value):
- return str__Float(space, w_float)
+ return w_float.descr_str(space)
if value == 0.0:
if copysign(1., value) == -1.:
return space.wrap("-0x0.0p+0")
@@ -656,21 +692,9 @@
s = "nan"
return s
-def repr__Float(space, w_float):
- return space.wrap(float2string(w_float.floatval, 'r', 0))
-
-def str__Float(space, w_float):
- return space.wrap(float2string(w_float.floatval, 'g', DTSF_STR_PRECISION))
-
-def format__Float_ANY(space, w_float, w_spec):
- return newformat.run_formatter(space, w_spec, "format_float", w_float)
-
# ____________________________________________________________
-def hash__Float(space, w_value):
- return space.wrap(_hash_float(space, w_value.floatval))
-
def _hash_float(space, v):
if isnan(v):
return 0
@@ -849,21 +873,6 @@
return z
-def neg__Float(space, w_float1):
- return W_FloatObject(-w_float1.floatval)
-
-def pos__Float(space, w_float):
- return float__Float(space, w_float)
-
-def abs__Float(space, w_float):
- return W_FloatObject(abs(w_float.floatval))
-
-def nonzero__Float(space, w_float):
- return space.newbool(w_float.floatval != 0.0)
-
-def getnewargs__Float(space, w_float):
- return space.newtuple([W_FloatObject(w_float.floatval)])
-
def float_as_integer_ratio__Float(space, w_float):
value = w_float.floatval
try:
More information about the pypy-commit
mailing list