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);
    }
}