File: Linker\CustomAttributeArgumentExtensions.cs
Web Access
Project: src\src\tools\illink\src\linker\Mono.Linker.csproj (illink)
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
 
using Mono.Cecil;
 
namespace Mono.Linker
{
	public static class CustomAttributeArgumentExtensions
	{
		public static bool IsEqualTo (this CustomAttributeArgument A, CustomAttributeArgument B)
		{
			var aVal = A.BaseValue ();
			var bVal = B.BaseValue ();
			if (aVal is CustomAttributeArgument[] aArray && bVal is CustomAttributeArgument[] bArray) {
				if (aArray.Length != bArray.Length)
					return false;
				for (int i = 0; i < aArray.Length; i++) {
					if (!aArray[i].IsEqualTo (bArray[i]))
						return false;
				}
				return true;
			}
			return aVal.Equals (bVal);
		}
		static object BaseValue (this object value)
		{
			while (value is CustomAttributeArgument caa)
				value = caa.Value;
			return value;
		}
	}
}