Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/cecil.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Mono.Cecil/MetadataResolver.cs')
-rw-r--r--Mono.Cecil/MetadataResolver.cs21
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))