Author: Armin Rigo <[email protected]>
Branch: py3.6
Changeset: r98283:22226b5e0778
Date: 2019-12-12 23:21 +0100
http://bitbucket.org/pypy/pypy/changeset/22226b5e0778/
Log: more like 8e5e71e1a26e: avoids making W_LongObjects for result that
most often fit in a W_IntObject
diff --git a/pypy/module/math/interp_math.py b/pypy/module/math/interp_math.py
--- a/pypy/module/math/interp_math.py
+++ b/pypy/module/math/interp_math.py
@@ -156,12 +156,12 @@
Return the floor of x as an int.
This is the largest integral value <= x.
"""
- from pypy.objspace.std.longobject import newlong_from_float
+ from pypy.objspace.std.floatobject import newint_from_float
w_descr = space.lookup(w_x, '__floor__')
if w_descr is not None:
return space.get_and_call_function(w_descr, w_x)
x = _get_double(space, w_x)
- return newlong_from_float(space, math.floor(x))
+ return newint_from_float(space, math.floor(x))
def sqrt(space, w_x):
"""sqrt(x)
@@ -259,11 +259,11 @@
Return the ceiling of x as an int.
This is the smallest integral value >= x.
"""
- from pypy.objspace.std.longobject import newlong_from_float
+ from pypy.objspace.std.floatobject import newint_from_float
w_descr = space.lookup(w_x, '__ceil__')
if w_descr is not None:
return space.get_and_call_function(w_descr, w_x)
- return newlong_from_float(space, math1_w(space, math.ceil, w_x))
+ return newint_from_float(space, math1_w(space, math.ceil, w_x))
def sinh(space, w_x):
"""sinh(x)
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
@@ -145,7 +145,8 @@
return space.w_NotImplemented
return func_with_new_name(_compare, 'descr_' + opname)
-def _newint_from_float(space, floatval):
+def newint_from_float(space, floatval):
+ """This is also used from module/math/interp_math.py"""
try:
value = ovfcheck_float_to_int(floatval)
except OverflowError:
@@ -448,7 +449,7 @@
return W_FloatObject(a)
def descr_trunc(self, space):
- return _newint_from_float(space, self.floatval)
+ return newint_from_float(space, self.floatval)
def descr_neg(self, space):
return W_FloatObject(-self.floatval)
@@ -938,7 +939,7 @@
if math.fabs(x - rounded) == 0.5:
# halfway case: round to even
rounded = 2.0 * rfloat.round_away(x / 2.0)
- return _newint_from_float(space, rounded)
+ return newint_from_float(space, rounded)
# interpret 2nd argument as a Py_ssize_t; clip on overflow
ndigits = space.getindex_w(w_ndigits, None)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit