Replace DelegateHelper with pre-generated delegates #4867
Merged
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.
As the title says. This allows us to get rid of the only
System.Reflection.Emit
usage in the ARMeilleure project, which should allow it to be compiled with NativeAOT. The only downside is that we need to write one additional line (the delegate declaration) for each method that we call from native JIT generated code.I have tried other approaches here using generic methods, but none of them worked as you can't use
GetFunctionPointerForDelegate
with a generic delegate (even if it is just contained inside a generic type). So I think the only other solution here would be using a source generator to generate the delegates, but given the amount of them, it would probably take more time and more lines of code to write the source generator than just pre-generating them here.