File: Linker.Dataflow\HoistedLocalKey.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 System;
using System.Diagnostics;
using Mono.Cecil;
 
namespace Mono.Linker.Dataflow
{
	// This represents a field which has been generated by the compiler as the
	// storage location for a hoisted local (a local variable which is lifted to a
	// field on a state machine type, or to a field on a closure accessed by lambdas
	// or local functions).
	public readonly struct HoistedLocalKey : IEquatable<HoistedLocalKey>
	{
		readonly FieldReference Field;
 
		public HoistedLocalKey (FieldReference field)
		{
			Debug.Assert (CompilerGeneratedState.IsHoistedLocal (field));
			Field = field;
		}
 
		public bool Equals (HoistedLocalKey other) => Field.Equals (other.Field);
 
		public override bool Equals (object? obj) => obj is HoistedLocalKey other && Equals (other);
 
		public override int GetHashCode () => Field.GetHashCode ();
 
		public static bool operator == (HoistedLocalKey left, HoistedLocalKey right) => left.Equals (right);
		public static bool operator != (HoistedLocalKey left, HoistedLocalKey right) => !(left == right);
	}
}