Skip to content

Commit

Permalink
Merge pull request #2243 from ravenexp/simple-fastcall
Browse files Browse the repository at this point in the history
pyo3-macros-backend: Replace `pyo3-build-config` with `abi3` feature
  • Loading branch information
davidhewitt authored Mar 23, 2022
2 parents 87c79c0 + 7a44aa1 commit 60d42b0
Show file tree
Hide file tree
Showing 4 changed files with 6 additions and 11 deletions.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"]
Expand Down
2 changes: 1 addition & 1 deletion pyo3-macros-backend/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -25,3 +24,4 @@ features = ["derive", "parsing", "printing", "clone-impls", "full", "extra-trait

[features]
pyproto = []
abi3 = []
12 changes: 3 additions & 9 deletions pyo3-macros-backend/src/method.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand All @@ -199,21 +199,15 @@ 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
}
}
}

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
Expand Down
1 change: 1 addition & 0 deletions pyo3-macros/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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 }
Expand Down

0 comments on commit 60d42b0

Please sign in to comment.