Author: Brian Kearns <[email protected]>
Branch:
Changeset: r68426:3b5c5d8fc95e
Date: 2013-12-13 17:39 -0500
http://bitbucket.org/pypy/pypy/changeset/3b5c5d8fc95e/
Log: bin() look for __index__
diff --git a/pypy/module/__builtin__/app_operation.py
b/pypy/module/__builtin__/app_operation.py
--- a/pypy/module/__builtin__/app_operation.py
+++ b/pypy/module/__builtin__/app_operation.py
@@ -1,4 +1,8 @@
def bin(x):
- if not isinstance(x, (int, long)):
- raise TypeError("must be int or long")
- return x.__format__("#b")
+ if isinstance(x, (int, long)):
+ value = x
+ elif hasattr(x, '__index__'):
+ value = x.__index__()
+ else:
+ raise TypeError("object cannot be interpreted as an index")
+ return value.__format__("#b")
diff --git a/pypy/module/__builtin__/test/test_builtin.py
b/pypy/module/__builtin__/test/test_builtin.py
--- a/pypy/module/__builtin__/test/test_builtin.py
+++ b/pypy/module/__builtin__/test/test_builtin.py
@@ -46,6 +46,15 @@
assert bin(2L) == "0b10"
assert bin(-2L) == "-0b10"
raises(TypeError, bin, 0.)
+ class C(object):
+ def __index__(self):
+ return 42
+ assert bin(C()) == bin(42)
+ class D(object):
+ def __int__(self):
+ return 42
+ exc = raises(TypeError, bin, D())
+ assert exc.value.message.find("object cannot be interpreted as an
index") != -1
def test_unichr(self):
import sys
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit