Merge pull request #2243 from ravenexp/simple-fastcall

pyo3-macros-backend: Replace `pyo3-build-config` with `abi3` feature
This commit is contained in:
David Hewitt 2022-03-23 08:01:34 +00:00 committed by GitHub
commit 60d42b07b4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 6 additions and 11 deletions

View File

@ -70,7 +70,7 @@ pyproto = ["pyo3-macros/pyproto"]
extension-module = ["pyo3-ffi/extension-module"]
# Use the Python limited API. See https://www.python.org/dev/peps/pep-0384/ for more.
abi3 = ["pyo3-build-config/abi3", "pyo3-ffi/abi3"]
abi3 = ["pyo3-build-config/abi3", "pyo3-ffi/abi3", "pyo3-macros/abi3"]
# With abi3, we can manually set the minimum Python version.
abi3-py37 = ["abi3-py38", "pyo3-build-config/abi3-py37", "pyo3-ffi/abi3-py37"]

View File

@ -16,7 +16,6 @@ edition = "2018"
[dependencies]
quote = { version = "1", default-features = false }
proc-macro2 = { version = "1", default-features = false }
pyo3-build-config = { path = "../pyo3-build-config", version = "0.16.2", features = ["resolve-config"] }
[dependencies.syn]
version = "1.0.56"
@ -25,3 +24,4 @@ features = ["derive", "parsing", "printing", "clone-impls", "full", "extra-trait
[features]
pyproto = []
abi3 = []

View File

@ -183,7 +183,7 @@ impl SelfType {
pub enum CallingConvention {
Noargs, // METH_NOARGS
Varargs, // METH_VARARGS | METH_KEYWORDS
Fastcall, // METH_FASTCALL | METH_KEYWORDS (Py3.7+ and !abi3)
Fastcall, // METH_FASTCALL | METH_KEYWORDS (not compatible with `abi3` feature)
TpNew, // special convention for tp_new
}
@ -199,7 +199,8 @@ impl CallingConvention {
} else if accept_kwargs {
// for functions that accept **kwargs, always prefer varargs
Self::Varargs
} else if can_use_fastcall() {
} else if cfg!(not(feature = "abi3")) {
// Not available in the Stable ABI as of Python 3.10
Self::Fastcall
} else {
Self::Varargs
@ -207,13 +208,6 @@ impl CallingConvention {
}
}
fn can_use_fastcall() -> bool {
const PY37: pyo3_build_config::PythonVersion =
pyo3_build_config::PythonVersion { major: 3, minor: 7 };
let config = pyo3_build_config::get();
config.version >= PY37 && !config.abi3
}
pub struct FnSpec<'a> {
pub tp: FnType,
// Rust function name

View File

@ -17,6 +17,7 @@ proc-macro = true
multiple-pymethods = []
pyproto = ["pyo3-macros-backend/pyproto"]
abi3 = ["pyo3-macros-backend/abi3"]
[dependencies]
proc-macro2 = { version = "1", default-features = false }