| File: Operations\ControlFlowGraphBuilder.ConditionalAccessOperationTracker.cs | Web Access |
| Project: src\roslyn\src\Compilers\Core\Portable\Microsoft.CodeAnalysis.csproj (Microsoft.CodeAnalysis) |
// 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; using System.Diagnostics.CodeAnalysis; using Microsoft.CodeAnalysis.Operations; using Microsoft.CodeAnalysis.PooledObjects; namespace Microsoft.CodeAnalysis.FlowAnalysis { internal sealed partial class ControlFlowGraphBuilder { private readonly struct ConditionalAccessOperationTracker { /// <summary> /// Represents the stack <see cref="IConditionalAccessOperation.Operation"/>s of a tree of conditional accesses. The top of the stack is the /// deepest node, and except in error conditions it should contain a <see cref="IConditionalAccessInstanceOperation"/> that will be visited /// when visiting this node. This is the basic recursion that ensures that the operations are visited at the correct time. /// </summary> public readonly ArrayBuilder<IOperation>? Operations; /// <summary> /// The basic block to branch to if the top of the <see cref="Operations"/> stack is null. /// </summary> public readonly BasicBlockBuilder? WhenNull; public ConditionalAccessOperationTracker(ArrayBuilder<IOperation> operations, BasicBlockBuilder whenNull) { Debug.Assert(operations != null && whenNull != null); Operations = operations; WhenNull = whenNull; } [MemberNotNullWhen(false, nameof(Operations), nameof(WhenNull))] public bool IsDefault => Operations == null; public void Free() { Operations?.Free(); } } } }