disable dynamic attribute test on pypy
diff --git a/include/pybind11/pybind11.h b/include/pybind11/pybind11.h
index 9caf35e..5835446 100644
--- a/include/pybind11/pybind11.h
+++ b/include/pybind11/pybind11.h
@@ -785,6 +785,11 @@
/* Support dynamic attributes */
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_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
diff --git a/tests/test_methods_and_attributes.cpp b/tests/test_methods_and_attributes.cpp
index 824e743..f7d6d68 100644
--- a/tests/test_methods_and_attributes.cpp
+++ b/tests/test_methods_and_attributes.cpp
@@ -176,9 +176,11 @@
.def_property_readonly("rvalue", &TestPropRVP::get_rvalue)
.def_property_readonly_static("static_rvalue", [](py::object) { return SimpleValue(); });
+#if !defined(PYPY_VERSION)
py::class_<DynamicClass>(m, "DynamicClass", py::dynamic_attr())
.def(py::init());
py::class_<CppDerivedDynamicClass, DynamicClass>(m, "CppDerivedDynamicClass")
.def(py::init());
+#endif
});
diff --git a/tests/test_methods_and_attributes.py b/tests/test_methods_and_attributes.py
index 1502f77..840ee70 100644
--- a/tests/test_methods_and_attributes.py
+++ b/tests/test_methods_and_attributes.py
@@ -180,6 +180,8 @@
assert cstats.alive() == 0
+# https://bitbucket.org/pypy/pypy/issues/2447
+@pytest.unsupported_on_pypy
def test_cyclic_gc():
from pybind11_tests import DynamicClass
diff --git a/tests/test_pickling.cpp b/tests/test_pickling.cpp
index 3941dc5..87c623d 100644
--- a/tests/test_pickling.cpp
+++ b/tests/test_pickling.cpp
@@ -57,6 +57,7 @@
p.setExtra2(t[2].cast<int>());
});
+#if !defined(PYPY_VERSION)
py::class_<PickleableWithDict>(m, "PickleableWithDict", py::dynamic_attr())
.def(py::init<std::string>())
.def_readwrite("value", &PickleableWithDict::value)
@@ -78,4 +79,5 @@
/* Assign Python state */
self.attr("__dict__") = t[2];
});
+#endif
});