File: src\ExpressionEvaluator\Core\Source\ResultProvider\Helpers\TypeAndCustomInfo.cs
Web Access
Project: src\src\ExpressionEvaluator\Core\Test\ResultProvider\Microsoft.CodeAnalysis.ResultProvider.Utilities.csproj (Microsoft.CodeAnalysis.ExpressionEvaluator.ResultProvider.Utilities)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
#nullable disable
 
using System.Diagnostics;
using Microsoft.VisualStudio.Debugger.Clr;
using Microsoft.VisualStudio.Debugger.Evaluation.ClrCompilation;
using Microsoft.VisualStudio.Debugger.Metadata;
 
namespace Microsoft.CodeAnalysis.ExpressionEvaluator
{
    internal readonly struct TypeAndCustomInfo
    {
        public readonly DkmClrType ClrType;
        public readonly DkmClrCustomTypeInfo Info;
 
        public TypeAndCustomInfo(DkmClrType type, DkmClrCustomTypeInfo info = null)
        {
            Debug.Assert(type != null); // Can only be null in the default instance.
            ClrType = type;
            Info = info;
        }
 
        public Type Type
        {
            get
            {
                var t = ClrType?.GetLmrType();
 
                //TODO: Sometimes we get byref types here when dealing with ref-returning members.
                //      That probably should not happen.
                //      For now we will just unwrap unexpected byrefs
                if (t?.IsByRef == true)
                {
                    t = t.GetElementType();
                    Debug.Assert(!t.IsByRef, "double byref type?");
                }
 
                return t;
            }
        }
    }
}