Author: Philip Jenvey <[email protected]>
Branch: stdlib-2.7.12
Changeset: r87535:72df4e872a46
Date: 2016-10-02 21:24 -0700
http://bitbucket.org/pypy/pypy/changeset/72df4e872a46/
Log: a2d8b4680ef9 for old style classes: pass thru numeric subclasses
returned from __trunc__
diff --git a/pypy/module/__builtin__/interp_classobj.py
b/pypy/module/__builtin__/interp_classobj.py
--- a/pypy/module/__builtin__/interp_classobj.py
+++ b/pypy/module/__builtin__/interp_classobj.py
@@ -571,6 +571,9 @@
return space.call_function(w_func)
w_truncated = space.trunc(self)
+ if (space.isinstance_w(w_truncated, space.w_int) or
+ space.isinstance_w(w_truncated, space.w_long)):
+ return w_truncated
# int() needs to return an int
try:
return space.int(w_truncated)
diff --git a/pypy/objspace/std/test/test_intobject.py
b/pypy/objspace/std/test/test_intobject.py
--- a/pypy/objspace/std/test/test_intobject.py
+++ b/pypy/objspace/std/test/test_intobject.py
@@ -502,12 +502,15 @@
assert int(TruncReturnsNonInt()) == 42
def test_trunc_returns_int_subclass(self):
- class TruncReturnsNonInt(object):
- def __trunc__(self):
- return True
- n = int(TruncReturnsNonInt())
- assert n == 1
- assert type(n) is bool
+ class Classic:
+ pass
+ for base in object, Classic:
+ class TruncReturnsNonInt(base):
+ def __trunc__(self):
+ return True
+ n = int(TruncReturnsNonInt())
+ assert n == 1
+ assert type(n) is bool
def test_int_before_string(self):
class Integral(str):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit