You've already forked linux-packaging-mono
Imported Upstream version 5.0.0.42
Former-commit-id: fd56571888259555122d8a0f58c68838229cea2b
This commit is contained in:
parent
1190d13a04
commit
6bdd276d05
72
external/linker/cecil/rocks/Mono.Cecil.Rocks/MethodDefinitionRocks.cs
vendored
Normal file
72
external/linker/cecil/rocks/Mono.Cecil.Rocks/MethodDefinitionRocks.cs
vendored
Normal file
@@ -0,0 +1,72 @@
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
using System;
|
||||
|
||||
namespace Mono.Cecil.Rocks {
|
||||
|
||||
#if INSIDE_ROCKS
|
||||
public
|
||||
#endif
|
||||
static class MethodDefinitionRocks {
|
||||
|
||||
public static MethodDefinition GetBaseMethod (this MethodDefinition self)
|
||||
{
|
||||
if (self == null)
|
||||
throw new ArgumentNullException ("self");
|
||||
if (!self.IsVirtual)
|
||||
return self;
|
||||
if (self.IsNewSlot)
|
||||
return self;
|
||||
|
||||
var base_type = ResolveBaseType (self.DeclaringType);
|
||||
while (base_type != null) {
|
||||
var @base = GetMatchingMethod (base_type, self);
|
||||
if (@base != null)
|
||||
return @base;
|
||||
|
||||
base_type = ResolveBaseType (base_type);
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
public static MethodDefinition GetOriginalBaseMethod (this MethodDefinition self)
|
||||
{
|
||||
if (self == null)
|
||||
throw new ArgumentNullException ("self");
|
||||
|
||||
while (true) {
|
||||
var @base = self.GetBaseMethod ();
|
||||
if (@base == self)
|
||||
return self;
|
||||
|
||||
self = @base;
|
||||
}
|
||||
}
|
||||
|
||||
static TypeDefinition ResolveBaseType (TypeDefinition type)
|
||||
{
|
||||
if (type == null)
|
||||
return null;
|
||||
|
||||
var base_type = type.BaseType;
|
||||
if (base_type == null)
|
||||
return null;
|
||||
|
||||
return base_type.Resolve ();
|
||||
}
|
||||
|
||||
static MethodDefinition GetMatchingMethod (TypeDefinition type, MethodDefinition method)
|
||||
{
|
||||
return MetadataResolver.GetMethod (type.Methods, method);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user