diff options
Diffstat (limited to 'Mono.Cecil/MetadataResolver.cs')
-rw-r--r-- | Mono.Cecil/MetadataResolver.cs | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/Mono.Cecil/MetadataResolver.cs b/Mono.Cecil/MetadataResolver.cs index 97d3c00..70d9265 100644 --- a/Mono.Cecil/MetadataResolver.cs +++ b/Mono.Cecil/MetadataResolver.cs @@ -258,6 +258,12 @@ namespace Mono.Cecil { if (!AreSame (method.ReturnType, reference.ReturnType)) continue; + if (method.IsVarArg () != reference.IsVarArg ()) + continue; + + if (method.IsVarArg () && IsVarArgCallTo (method, reference)) + return method; + if (method.HasParameters != reference.HasParameters) continue; @@ -290,6 +296,21 @@ namespace Mono.Cecil { return true; } + private static bool IsVarArgCallTo (MethodDefinition method, MethodReference reference) + { + if (method.Parameters.Count >= reference.Parameters.Count) + return false; + + if (reference.GetSentinelPosition () != method.Parameters.Count) + return false; + + for (int i = 0; i < method.Parameters.Count; i++) + if (!AreSame (method.Parameters [i].ParameterType, reference.Parameters [i].ParameterType)) + return false; + + return true; + } + static bool AreSame (TypeSpecification a, TypeSpecification b) { if (!AreSame (a.ElementType, b.ElementType)) |