From 0a84c201f70f5b07d62430e059055b8f4f52e28f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Niederb=C3=BChl?= Date: Sat, 11 Jan 2020 18:55:40 +0100 Subject: [PATCH] Revert "Disable segfaulty subclassing by default" This reverts commit 5096f936dc55486592a2df14eaca6a54270dac4c. --- Cargo.toml | 3 --- examples/rustapi_module/Cargo.toml | 2 +- guide/src/class.md | 2 +- pyo3-derive-backend/Cargo.toml | 3 --- pyo3-derive-backend/src/pyclass.rs | 6 ------ pyo3cls/Cargo.toml | 3 --- tests/test_inheritance.rs | 3 --- 7 files changed, 2 insertions(+), 20 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index dde8dbb9..c41e6017 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -57,9 +57,6 @@ extension-module = [] # are welcome. # abi3 = [] -# Activate subclassing support -unsound-subclass = ["pyo3cls/unsound-subclass"] - [workspace] members = [ "pyo3cls", diff --git a/examples/rustapi_module/Cargo.toml b/examples/rustapi_module/Cargo.toml index 7490e95a..98e728ee 100644 --- a/examples/rustapi_module/Cargo.toml +++ b/examples/rustapi_module/Cargo.toml @@ -9,7 +9,7 @@ edition = "2018" [dependencies.pyo3] path = "../../" -features = ["extension-module", "unsound-subclass"] +features = ["extension-module"] [lib] name = "rustapi_module" diff --git a/guide/src/class.md b/guide/src/class.md index 6831c340..378b5d62 100644 --- a/guide/src/class.md +++ b/guide/src/class.md @@ -173,10 +173,10 @@ so that they can benefit from a freelist. `XXX` is a number of items for the fre If a custom class contains references to other Python objects that can be collected, the `PyGCProtocol` trait has to be implemented. * `weakref` - Adds support for Python weak references. * `extends=BaseType` - Use a custom base class. The base `BaseType` must implement `PyTypeInfo`. +* `subclass` - Allows Python classes to inherit from this class. * `dict` - Adds `__dict__` support, so that the instances of this type have a dictionary containing arbitrary instance variables. * `module="XXX"` - Set the name of the module the class will be shown as defined in. If not given, the class will be a virtual member of the `builtins` module. -* `subclass` - Allows Python classes to inherit from this class. This feature is hidden behind a `unsound-subclass` feature because it is currently causing segmentation faults ## Constructor diff --git a/pyo3-derive-backend/Cargo.toml b/pyo3-derive-backend/Cargo.toml index a040ab89..b3b974eb 100644 --- a/pyo3-derive-backend/Cargo.toml +++ b/pyo3-derive-backend/Cargo.toml @@ -14,6 +14,3 @@ edition = "2018" quote = "1" proc-macro2 = "1" syn = { version = "1", features = ["full", "extra-traits"] } - -[features] -unsound-subclass = [] diff --git a/pyo3-derive-backend/src/pyclass.rs b/pyo3-derive-backend/src/pyclass.rs index b7d490b3..5c845bb8 100644 --- a/pyo3-derive-backend/src/pyclass.rs +++ b/pyo3-derive-backend/src/pyclass.rs @@ -136,12 +136,6 @@ impl PyClassArgs { parse_quote! {pyo3::type_flags::WEAKREF} } "subclass" => { - if cfg!(not(feature = "unsound-subclass")) { - return Err(syn::Error::new_spanned( - exp.path.clone(), - "You need to activate the `unsound-subclass` feature if you want to use subclassing", - )); - } parse_quote! {pyo3::type_flags::BASETYPE} } "dict" => { diff --git a/pyo3cls/Cargo.toml b/pyo3cls/Cargo.toml index 344a2da3..19fcaf70 100644 --- a/pyo3cls/Cargo.toml +++ b/pyo3cls/Cargo.toml @@ -18,6 +18,3 @@ quote = "1" proc-macro2 = "1" syn = { version = "1", features = ["full", "extra-traits"] } pyo3-derive-backend = { path = "../pyo3-derive-backend", version = "=0.8.5" } - -[features] -unsound-subclass = ["pyo3-derive-backend/unsound-subclass"] diff --git a/tests/test_inheritance.rs b/tests/test_inheritance.rs index 4bbd3701..f19d0fd1 100644 --- a/tests/test_inheritance.rs +++ b/tests/test_inheritance.rs @@ -1,7 +1,6 @@ use pyo3::prelude::*; use pyo3::py_run; -#[cfg(feature = "unsound-subclass")] use pyo3::types::IntoPyDict; use pyo3::types::{PyDict, PySet}; @@ -13,11 +12,9 @@ struct BaseClass { val1: usize, } -#[cfg(feature = "unsound-subclass")] #[pyclass(subclass)] struct SubclassAble {} -#[cfg(feature = "unsound-subclass")] #[test] fn subclass() { let gil = Python::acquire_gil();