disable dynamic attribute test on pypy

This commit is contained in:
Wenzel Jakob 2016-12-26 13:12:10 +01:00
parent a3fec901b8
commit 64cb699e8a
4 changed files with 11 additions and 0 deletions

View File

@ -785,6 +785,11 @@ protected:
/* Support dynamic attributes */ /* Support dynamic attributes */
if (rec->dynamic_attr) { if (rec->dynamic_attr) {
#if defined(PYPY_VERSION)
pybind11_fail(std::string(rec->name) + ": dynamic attributes are "
"currently not supported in "
"conunction with PyPy!");
#endif
type->ht_type.tp_flags |= Py_TPFLAGS_HAVE_GC; type->ht_type.tp_flags |= Py_TPFLAGS_HAVE_GC;
type->ht_type.tp_dictoffset = type->ht_type.tp_basicsize; // place the dict at the end type->ht_type.tp_dictoffset = type->ht_type.tp_basicsize; // place the dict at the end
type->ht_type.tp_basicsize += sizeof(PyObject *); // and allocate enough space for it type->ht_type.tp_basicsize += sizeof(PyObject *); // and allocate enough space for it

View File

@ -176,9 +176,11 @@ test_initializer methods_and_attributes([](py::module &m) {
.def_property_readonly("rvalue", &TestPropRVP::get_rvalue) .def_property_readonly("rvalue", &TestPropRVP::get_rvalue)
.def_property_readonly_static("static_rvalue", [](py::object) { return SimpleValue(); }); .def_property_readonly_static("static_rvalue", [](py::object) { return SimpleValue(); });
#if !defined(PYPY_VERSION)
py::class_<DynamicClass>(m, "DynamicClass", py::dynamic_attr()) py::class_<DynamicClass>(m, "DynamicClass", py::dynamic_attr())
.def(py::init()); .def(py::init());
py::class_<CppDerivedDynamicClass, DynamicClass>(m, "CppDerivedDynamicClass") py::class_<CppDerivedDynamicClass, DynamicClass>(m, "CppDerivedDynamicClass")
.def(py::init()); .def(py::init());
#endif
}); });

View File

@ -180,6 +180,8 @@ def test_dynamic_attributes():
assert cstats.alive() == 0 assert cstats.alive() == 0
# https://bitbucket.org/pypy/pypy/issues/2447
@pytest.unsupported_on_pypy
def test_cyclic_gc(): def test_cyclic_gc():
from pybind11_tests import DynamicClass from pybind11_tests import DynamicClass

View File

@ -57,6 +57,7 @@ test_initializer pickling([](py::module &m) {
p.setExtra2(t[2].cast<int>()); p.setExtra2(t[2].cast<int>());
}); });
#if !defined(PYPY_VERSION)
py::class_<PickleableWithDict>(m, "PickleableWithDict", py::dynamic_attr()) py::class_<PickleableWithDict>(m, "PickleableWithDict", py::dynamic_attr())
.def(py::init<std::string>()) .def(py::init<std::string>())
.def_readwrite("value", &PickleableWithDict::value) .def_readwrite("value", &PickleableWithDict::value)
@ -78,4 +79,5 @@ test_initializer pickling([](py::module &m) {
/* Assign Python state */ /* Assign Python state */
self.attr("__dict__") = t[2]; self.attr("__dict__") = t[2];
}); });
#endif
}); });