Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support GenericInstance types in inline method signatures #565

Merged
merged 1 commit into from Feb 2, 2024

Conversation

Zetrith
Copy link
Contributor

@Zetrith Zetrith commented Jan 14, 2024

Currently, Harmony can't patch nor MethodCopier.GetInstructions of methods with calli instructions containing generic instances in their signature such as in this example:

calli void(class [mscorlib]System.Collections.Generic.List`1<int>)

Patching or calling GetInstructions on such methods results in:

System.NotSupportedException: Unsupported generic callsite element: GenericInstance

This is a rare but legitimate case that's come up in something I'm working on. Note that this isn't about open generics (like List<T>, which Harmony doesn't really support) but closed ones (e.g. List<int>).

The pull request fixes this issue by adding support for type signature elements of kind GenericInstance in the inline signature parser. The patch is directly based on Mono.Cecil's implementation: https://github.com/jbevain/cecil/blob/96026325ee1cb6627a3e4a32b924ab2905f02553/Mono.Cecil/AssemblyReader.cs#L3424

This change purely expands the set of patchable methods so poses no backwards compatibility concerns.

@pardeike pardeike merged commit 03b6426 into pardeike:master Feb 2, 2024
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants