[pypy-commit] pypy py3.6: hg merge default
rlamy
pypy.commits at gmail.com
Tue Aug 20 15:48:37 EDT 2019
Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: py3.6
Changeset: r97229:aa1858313621
Date: 2019-08-20 20:47 +0100
http://bitbucket.org/pypy/pypy/changeset/aa1858313621/
Log: hg merge default
diff --git a/pypy/objspace/std/dictmultiobject.py b/pypy/objspace/std/dictmultiobject.py
--- a/pypy/objspace/std/dictmultiobject.py
+++ b/pypy/objspace/std/dictmultiobject.py
@@ -381,9 +381,23 @@
del currently_in_repr[d]
except:
pass
+
+ def viewrepr(currently_in_repr, view):
+ if view in currently_in_repr:
+ return '...'
+ currently_in_repr[view] = 1
+ try:
+ return (type(view).__name__ + "([" +
+ ", ".join([repr(x) for x in view]) + '])')
+ finally:
+ try:
+ del currently_in_repr[view]
+ except:
+ pass
''', filename=__file__)
dictrepr = app.interphook("dictrepr")
+viewrepr = app.interphook("viewrepr")
W_DictMultiObject.typedef = TypeDef("dict",
@@ -1431,10 +1445,7 @@
self.w_dict = w_dict
def descr_repr(self, space):
- typename = space.type(self).getname(space)
- w_seq = space.call_function(space.w_list, self)
- seq_repr = space.utf8_w(space.repr(w_seq))
- return space.newtext("%s(%s)" % (typename, seq_repr))
+ return viewrepr(space, space.get_objects_in_repr(), self)
def descr_len(self, space):
return space.len(self.w_dict)
diff --git a/pypy/objspace/std/test/test_dictmultiobject.py b/pypy/objspace/std/test/test_dictmultiobject.py
--- a/pypy/objspace/std/test/test_dictmultiobject.py
+++ b/pypy/objspace/std/test/test_dictmultiobject.py
@@ -895,6 +895,11 @@
d = {'日本': '日本国'}
assert repr(d.items()) == "dict_items([('日本', '日本国')])"
+ def test_recursive_repr(self):
+ d = {1: 2}
+ d[2] = d.values()
+ assert repr(d) == '{1: 2, 2: dict_values([2, ...])}'
+
def test_keys_set_operations(self):
d1 = {'a': 1, 'b': 2}
d2 = {'b': 3, 'c': 2}
More information about the pypy-commit
mailing list