File: BoundTree\BoundAwaitableInfo.cs
Web Access
Project: src\src\Compilers\CSharp\Portable\Microsoft.CodeAnalysis.CSharp.csproj (Microsoft.CodeAnalysis.CSharp)
// 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.
 
using System.Diagnostics;
 
namespace Microsoft.CodeAnalysis.CSharp;
 
partial class BoundAwaitableInfo
{
    private partial void Validate()
    {
        if (RuntimeAsyncAwaitCall is not null)
        {
            Debug.Assert(RuntimeAsyncAwaitCall.Method.ContainingType.ExtendedSpecialType == InternalSpecialType.System_Runtime_CompilerServices_AsyncHelpers);
            Debug.Assert(RuntimeAsyncAwaitCallPlaceholder is not null);
 
            switch (RuntimeAsyncAwaitCall.Method.Name)
            {
                case "Await":
                    Debug.Assert(GetAwaiter is null);
                    Debug.Assert(IsCompleted is null);
                    Debug.Assert(GetResult is null);
                    break;
 
                case "AwaitAwaiter":
                case "UnsafeAwaitAwaiter":
                    Debug.Assert(GetAwaiter is not null);
                    Debug.Assert(IsCompleted is not null);
                    Debug.Assert(GetResult is not null);
                    break;
 
                default:
                    Debug.Fail($"Unexpected RuntimeAsyncAwaitCall: {RuntimeAsyncAwaitCall.Method.Name}");
                    break;
            }
        }
 
        Debug.Assert(GetAwaiter is not null || RuntimeAsyncAwaitCall is not null || IsDynamic || HasErrors);
    }
}