using System; using dnlib.DotNet; namespace Confuser.Core.Project.Patterns { /// /// A function that indicate whether the type inherits from the specified type. /// public class InheritsFunction : PatternFunction { internal const string FnName = "inherits"; /// public override string Name { get { return FnName; } } /// public override int ArgumentCount { get { return 1; } } /// public override object Evaluate(IDnlibDef definition) { string name = Arguments[0].Evaluate(definition).ToString(); if (!(definition is TypeDef)) return false; var type = (TypeDef)definition; while (type.BaseType != null) { type = type.BaseType.ResolveTypeDefThrow(); if (type.FullName == name) return true; } return false; } } }