Author: Matti Picus <[email protected]>
Branch: fix-descrmismatch-crash
Changeset: r97767:5aa0e1eef0dd
Date: 2019-10-13 11:58 +0300
http://bitbucket.org/pypy/pypy/changeset/5aa0e1eef0dd/
Log: improve error message
diff --git a/pypy/interpreter/test/test_gateway.py
b/pypy/interpreter/test/test_gateway.py
--- a/pypy/interpreter/test/test_gateway.py
+++ b/pypy/interpreter/test/test_gateway.py
@@ -1009,9 +1009,18 @@
class AppTestFastPathCrash(object):
+ def setup_class(cls):
+ cls.w_runappdirect = cls.space.wrap(cls.runappdirect)
+
def test_fast_path_crash(self):
- with raises(TypeError) as excinfo:
- # does not crash in BuiltinCodePassThroughArguments0.funcrun
- dict.__init__.im_func(0)
- print(str(excinfo.value))
- assert str(excinfo.value) == "'dict' object expected, got 'int'
instead"
+ # issue bb-3091 crash in BuiltinCodePassThroughArguments0.funcrun
+ for obj in (dict, set, frozenset):
+ with raises(TypeError) as excinfo:
+ if self.runappdirect:
+ msg_fmt = "'%s' object but received a '%s'"
+ obj.__init__(0)
+ else:
+ msg_fmt = "'%s' object expected, got '%s'"
+ obj.__init__.im_func(0)
+ msg = msg_fmt %(obj.__name__, 'int')
+ assert msg in str(excinfo.value)
diff --git a/pypy/objspace/std/setobject.py b/pypy/objspace/std/setobject.py
--- a/pypy/objspace/std/setobject.py
+++ b/pypy/objspace/std/setobject.py
@@ -496,6 +496,12 @@
class W_SetObject(W_BaseSetObject):
+
+ #overridden here so the error is reported correctly
+ def __init__(self, space, w_iterable=None):
+ """Initialize the set by taking ownership of 'setdata'."""
+ W_BaseSetObject.__init__(self, space, w_iterable)
+
def _newobj(self, space, w_iterable):
"""Make a new set by taking ownership of 'w_iterable'."""
if type(self) is W_SetObject:
@@ -516,7 +522,7 @@
Build an unordered collection.""",
__new__ = gateway.interp2app(W_SetObject.descr_new),
- __init__ = gateway.interp2app(W_BaseSetObject.descr_init),
+ __init__ = gateway.interp2app(W_SetObject.descr_init),
__repr__ = gateway.interp2app(W_BaseSetObject.descr_repr),
__hash__ = None,
__cmp__ = gateway.interp2app(W_BaseSetObject.descr_cmp),
@@ -572,6 +578,11 @@
class W_FrozensetObject(W_BaseSetObject):
hash = 0
+ #overridden here so the error is reported correctly
+ def __init__(self, space, w_iterable=None):
+ """Initialize the frozenset by taking ownership of 'setdata'."""
+ W_BaseSetObject.__init__(self, space, w_iterable)
+
def _cleanup_(self):
# in case there are frozenset objects existing during
# translation, make sure we don't translate a cached hash
@@ -639,6 +650,7 @@
Build an immutable unordered collection.""",
__new__ = gateway.interp2app(W_FrozensetObject.descr_new2),
+ __init__ = gateway.interp2app(W_FrozensetObject.descr_init),
__repr__ = gateway.interp2app(W_BaseSetObject.descr_repr),
__hash__ = gateway.interp2app(W_FrozensetObject.descr_hash),
__cmp__ = gateway.interp2app(W_BaseSetObject.descr_cmp),
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit