reduce codegen for extern "C" trampoline functions #5586
Merged
+193
−244
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Inspired by what I learned working on #5551 (not exactly split from that diff, but I like this more).
This PR refactors the internals of our
#[pymethods]and#[pyfunction]codegen so that we don't define anextern "C"function on each invocation but instead pick them up from generic implementations defined insrc/impl_/trampoline.rs.The changes to
trampoline.rsare the material part of this diff; each trampoline is reworked to be a generic portion (which takes the target function to call as a generic argument) and a concrete inner. The rest of the diff is just adjustments to reference these generic functions (by way of a helperget_trampoline_function!macro).