1 instantiation of BasicBlock
Microsoft.CodeAnalysis (1)
Operations\ControlFlowGraphBuilder.BasicBlockBuilder.cs (1)
82var block = new BasicBlock(Kind,
280 references to BasicBlock
ILLink.RoslynAnalyzer (7)
DataFlow\BasicBlockExtensions.cs (1)
12 public static IEnumerable<IOperation> DescendantOperations (this BasicBlock basicBlock)
DataFlow\ControlFlowGraphExtensions.cs (4)
15 public static BasicBlock EntryBlock (this ControlFlowGraph cfg) 17 var firstBlock = cfg.Blocks[0]; 22 public static BasicBlock ExitBlock (this ControlFlowGraph cfg) 24 var lastBlock = cfg.Blocks.Last ();
DataFlow\ControlFlowGraphProxy.cs (2)
26 public readonly record struct BlockProxy (BasicBlock Block) : IBlock<BlockProxy> 51 foreach (var block in ControlFlowGraph.Blocks)
Microsoft.CodeAnalysis (40)
Operations\BasicBlockKind.cs (1)
8/// <see cref="BasicBlock"/> kind.
Operations\ControlFlowBranch.cs (5)
23BasicBlock source, 24BasicBlock? destination, 37public BasicBlock Source { get; } 42public BasicBlock? Destination { get; } 50/// Indicates if this branch represents <see cref="BasicBlock.ConditionalSuccessor"/> of the <see cref="Source"/> basic block.
Operations\ControlFlowConditionKind.cs (13)
8/// Represents kind of conditional branch from a <see cref="BasicBlock"/>. 13/// Indicates no conditional branch from a <see cref="BasicBlock"/>. 14/// Associated <see cref="BasicBlock.ConditionalSuccessor"/> is null. 19/// Indicates a conditional branch from a <see cref="BasicBlock"/>, 20/// with a non-null <see cref="BasicBlock.BranchValue"/> and <see cref="BasicBlock.ConditionalSuccessor"/>. 21/// If <see cref="BasicBlock.BranchValue"/> evaluates to <code>false</code>, 22/// then the branch <see cref="BasicBlock.ConditionalSuccessor"/> is taken. 27/// Indicates a conditional branch from a <see cref="BasicBlock"/>, 28/// with a non-null <see cref="BasicBlock.BranchValue"/> and <see cref="BasicBlock.ConditionalSuccessor"/>. 29/// If <see cref="BasicBlock.BranchValue"/> evaluates to <code>true</code>, 30/// then the branch <see cref="BasicBlock.ConditionalSuccessor"/> is taken.
Operations\ControlFlowGraph.cs (5)
19/// This graph contains a set of <see cref="BasicBlock"/>s, with an entry block, zero 21/// Each basic block contains zero or more <see cref="BasicBlock.Operations"/> and 35ImmutableArray<BasicBlock> blocks, ControlFlowRegion root, 197/// Note that <see cref="BasicBlock.Operations"/> in the control flow graph are not in the same operation tree as 212public ImmutableArray<BasicBlock> Blocks { get; }
Operations\ControlFlowGraphBuilder.BasicBlockBuilder.cs (5)
79public BasicBlock ToImmutable() 82var block = new BasicBlock(Kind, 227public ImmutableArray<ControlFlowBranch> ConvertPredecessorsToBranches(ArrayBuilder<BasicBlock> blocks) 236BasicBlock block = blocks[Ordinal]; 291BasicBlock predecessor = blocks[predecessorBlockBuilder.Ordinal];
Operations\ControlFlowGraphBuilder.cs (2)
172private static ImmutableArray<BasicBlock> ToImmutableBlocks(ArrayBuilder<BasicBlockBuilder> blockBuilders) 174var builder = ArrayBuilder<BasicBlock>.GetInstance(blockBuilders.Count);
Operations\ControlFlowRegion.cs (5)
12/// Encapsulates information about regions of <see cref="BasicBlock"/>s in a <see cref="ControlFlowGraph"/>. 34/// Ordinal (<see cref="BasicBlock.Ordinal"/>) of the first <see cref="BasicBlock"/> within the region. 39/// Ordinal (<see cref="BasicBlock.Ordinal"/>) of the last <see cref="BasicBlock"/> within the region.
Operations\ControlFlowRegionKind.cs (4)
15/// A root region encapsulating all <see cref="BasicBlock"/>s in a <see cref="ControlFlowGraph"/> 44/// Doesn't contain any <see cref="BasicBlock"/>s directly. 50/// and <see cref="FilterAndHandler"/> regions. Doesn't contain any <see cref="BasicBlock"/>s directly. 61/// region. Doesn't contain any <see cref="BasicBlock"/>s directly.
Microsoft.CodeAnalysis.AnalyzerUtilities (116)
src\RoslynAnalyzers\Utilities\FlowAnalysis\BranchWithInfo.cs (4)
28internal BranchWithInfo(BasicBlock destination) 42BasicBlock destination, 63public BasicBlock Destination { get; } 75internal BranchWithInfo WithEmptyRegions(BasicBlock destination)
src\RoslynAnalyzers\Utilities\FlowAnalysis\Extensions\BasicBlockExtensions.cs (21)
16internal static IEnumerable<(BasicBlock predecessorBlock, BranchWithInfo branchWithInfo)> GetPredecessorsWithBranches(this BasicBlock basicBlock, ControlFlowGraph cfg) 33internal static ITypeSymbol? GetEnclosingRegionExceptionType(this BasicBlock basicBlock) 49public static IEnumerable<IOperation> DescendantOperations(this BasicBlock basicBlock) 71public static bool IsContainedInRegionOfKind(this BasicBlock basicBlock, ControlFlowRegionKind regionKind) 77public static ControlFlowRegion? GetContainingRegionOfKind(this BasicBlock basicBlock, ControlFlowRegionKind regionKind) 96public static bool IsFirstBlockOfFinally(this BasicBlock basicBlock, [NotNullWhen(returnValue: true)] out ControlFlowRegion? finallyRegion) 102public static bool IsLastBlockOfFinally(this BasicBlock basicBlock, [NotNullWhen(returnValue: true)] out ControlFlowRegion? finallyRegion) 108public static bool IsFirstBlockOfRegionKind(this BasicBlock basicBlock, ControlFlowRegionKind regionKind, [NotNullWhen(returnValue: true)] out ControlFlowRegion? region) 114public static bool IsLastBlockOfRegionKind(this BasicBlock basicBlock, ControlFlowRegionKind regionKind, [NotNullWhen(returnValue: true)] out ControlFlowRegion? region) 117private static bool IsFirstOrLastBlockOfRegionKind(this BasicBlock basicBlock, ControlFlowRegionKind regionKind, bool first, [NotNullWhen(returnValue: true)] out ControlFlowRegion? foundRegion) 145public static bool IsFirstBlockOfCompilerGeneratedFinally(this BasicBlock basicBlock, ControlFlowGraph cfg) 163internal static ControlFlowRegion? GetInnermostRegionStartedByBlock(this BasicBlock basicBlock, ControlFlowRegionKind regionKind) 190internal static int GetMaxSuccessorOrdinal(this BasicBlock basicBlock) 194internal static bool DominatesPredecessors(this BasicBlock? basicBlock, ControlFlowGraph cfg) 206var sourceBlock = predecessor.Source; 223var sourceBlock = cfg.Blocks[ordinal]; 233static bool DominatesBlock(BasicBlock sourceBlock, BasicBlock basicBlock, PooledHashSet<int> processedOrdinals, ArrayBuilder<int> unprocessedOrdinals) 237static bool DominatesBranch(ControlFlowBranch? branch, BasicBlock basicBlock, PooledHashSet<int> processedOrdinals, ArrayBuilder<int> unprocessedOrdinals) 239var destinationBlock = branch?.Destination;
src\RoslynAnalyzers\Utilities\FlowAnalysis\Extensions\ControlFlowGraphExtensions.cs (3)
15public static BasicBlock GetEntry(this ControlFlowGraph cfg) => cfg.Blocks.Single(b => b.Kind == BasicBlockKind.Entry); 16public static BasicBlock GetExit(this ControlFlowGraph cfg) => cfg.Blocks.Single(b => b.Kind == BasicBlockKind.Exit); 19foreach (BasicBlock block in cfg.Blocks)
src\RoslynAnalyzers\Utilities\FlowAnalysis\Extensions\ControlFlowRegionExtensions.cs (1)
19var block = cfg.Blocks[i];
src\RoslynAnalyzers\Utilities\FlowAnalysis\Extensions\IOperationExtensions_FlowAnalysis.cs (1)
21foreach (var block in cfg.Blocks)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\CopyAnalysis\CopyAnalysis.CopyDataFlowOperationVisitor.cs (2)
40public override CopyAnalysisData Flow(IOperation statement, BasicBlock block, CopyAnalysisData input) 49BasicBlock fromBlock,
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\CopyAnalysis\CopyAnalysis.cs (1)
64protected override CopyBlockAnalysisResult ToBlockResult(BasicBlock basicBlock, CopyAnalysisData blockAnalysisData)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\CopyAnalysis\CopyBlockAnalysisResult.cs (1)
15internal CopyBlockAnalysisResult(BasicBlock basicBlock, CopyAnalysisData blockAnalysisData)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\DisposeAnalysis\DisposeAnalysis.cs (1)
133protected override DisposeBlockAnalysisResult ToBlockResult(BasicBlock basicBlock, DictionaryAnalysisData<AbstractLocation, DisposeAbstractValue> blockAnalysisData)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\DisposeAnalysis\DisposeBlockAnalysisResult.cs (1)
17internal DisposeBlockAnalysisResult(BasicBlock basicBlock, DisposeAnalysisData blockAnalysisData)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\GlobalFlowStateAnalysis\GlobalFlowStateAnalysis.cs (1)
142protected override GlobalFlowStateBlockAnalysisResult ToBlockResult(BasicBlock basicBlock, GlobalFlowStateAnalysisData blockAnalysisData)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\GlobalFlowStateAnalysis\GlobalFlowStateBlockAnalysisResult.cs (1)
17internal GlobalFlowStateBlockAnalysisResult(BasicBlock basicBlock, GlobalFlowStateAnalysisData blockAnalysisData)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\GlobalFlowStateAnalysis\GlobalFlowStateDataFlowOperationVisitor.cs (2)
72IOperation statement, BasicBlock block, DictionaryAnalysisData<AnalysisEntity, TAbstractAnalysisValue> input) 97BasicBlock fromBlock, BranchWithInfo branch, DictionaryAnalysisData<AnalysisEntity, TAbstractAnalysisValue> input)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\GlobalFlowStateAnalysis\GlobalFlowStateValueSetFlowOperationVisitor.cs (3)
26public sealed override (GlobalFlowStateAnalysisData output, bool isFeasibleBranch) FlowBranch(BasicBlock fromBlock, BranchWithInfo branch, GlobalFlowStateAnalysisData input) 82protected sealed override GlobalFlowStateAnalysisData MergeAnalysisData(GlobalFlowStateAnalysisData value1, GlobalFlowStateAnalysisData value2, BasicBlock forBlock) 87protected sealed override GlobalFlowStateAnalysisData MergeAnalysisDataForBackEdge(GlobalFlowStateAnalysisData value1, GlobalFlowStateAnalysisData value2, BasicBlock forBlock)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\ParameterValidationAnalysis\ParameterValidationAnalysis.cs (2)
115foreach (var block in analysisContext.ControlFlowGraph.Blocks) 135protected override ParameterValidationBlockAnalysisResult ToBlockResult(BasicBlock basicBlock, ParameterValidationAnalysisData blockAnalysisData) => new(basicBlock, blockAnalysisData);
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\ParameterValidationAnalysis\ParameterValidationBlockAnalysisResult.cs (1)
17public ParameterValidationBlockAnalysisResult(BasicBlock basicBlock, ParameterValidationAnalysisData blockAnalysisData)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PointsToAnalysis\PointsToAnalysis.cs (1)
128protected override PointsToBlockAnalysisResult ToBlockResult(BasicBlock basicBlock, PointsToAnalysisData blockAnalysisData)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PointsToAnalysis\PointsToAnalysis.PointsToDataFlowOperationVisitor.cs (3)
97public override PointsToAnalysisData Flow(IOperation statement, BasicBlock block, PointsToAnalysisData input) 120public override (PointsToAnalysisData output, bool isFeasibleBranch) FlowBranch(BasicBlock fromBlock, BranchWithInfo branch, PointsToAnalysisData input) 576protected override PointsToAnalysisData MergeAnalysisDataForBackEdge(PointsToAnalysisData value1, PointsToAnalysisData value2, BasicBlock forBlock)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PointsToAnalysis\PointsToBlockAnalysisResult.cs (1)
15internal PointsToBlockAnalysisResult(BasicBlock basicBlock, PointsToAnalysisData blockAnalysisData)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PropertySetAnalysis\PropertySetAnalysis.cs (1)
325protected override PropertySetBlockAnalysisResult ToBlockResult(BasicBlock basicBlock, PropertySetAnalysisData blockAnalysisData)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PropertySetAnalysis\PropertySetBlockAnalysisResult.cs (1)
19public PropertySetBlockAnalysisResult(BasicBlock basicBlock, PropertySetAnalysisData blockAnalysisData)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\TaintedDataAnalysis\TaintedDataAnalysis.cs (1)
135protected override TaintedDataBlockAnalysisResult ToBlockResult(BasicBlock basicBlock, TaintedDataAnalysisData blockAnalysisData)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\TaintedDataAnalysis\TaintedDataBlockAnalysisResult.cs (1)
18public TaintedDataBlockAnalysisResult(BasicBlock basicBlock, TaintedDataAnalysisData blockAnalysisData)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\ValueContentAnalysis\ValueContentAnalysis.cs (1)
124protected override ValueContentBlockAnalysisResult ToBlockResult(BasicBlock basicBlock, ValueContentAnalysisData blockAnalysisData)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\ValueContentAnalysis\ValueContentAnalysis.ValueContentDataFlowOperationVisitor.cs (1)
164protected override ValueContentAnalysisData MergeAnalysisDataForBackEdge(ValueContentAnalysisData value1, ValueContentAnalysisData value2, BasicBlock forBlock)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\ValueContentAnalysis\ValueContentBlockAnalysisResult.cs (1)
15internal ValueContentBlockAnalysisResult(BasicBlock basicBlock, ValueContentAnalysisData blockAnalysisData)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\AbstractBlockAnalysisResult.cs (2)
12protected AbstractBlockAnalysisResult(BasicBlock basicBlock) 17public BasicBlock BasicBlock { get; }
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\DataFlowAnalysis.cs (22)
63using var uniqueSuccessors = PooledHashSet<BasicBlock>.GetInstance(); 99foreach (var block in cfg.Blocks) 104var entry = cfg.GetEntry(); 134foreach (var block in cfg.Blocks) 187PooledHashSet<BasicBlock> uniqueSuccessors, 197foreach (var block in cfg.Blocks) 222var block = cfg.Blocks[blockOrdinal]; 337var successorBlock = successorWithBranch.Destination; 489static ControlFlowRegion? TryGetReachableCatchRegionStartingHandler(ControlFlowRegion tryAndCatchRegion, BasicBlock sourceBlock) 505ControlFlowRegion? MergeIntoCatchInputData(ControlFlowRegion tryAndCatchRegion, TAnalysisData dataToMerge, BasicBlock sourceBlock) 513var catchBlock = cfg.Blocks[catchRegion.FirstBlockOrdinal]; 572var block = cfg.Blocks[blockOrdinal]; 582bool HasUnprocessedPredecessorBlock(BasicBlock block) 591static ControlFlowRegion? GetEnclosingTryAndCatchRegionIfStartsHandler(BasicBlock block) 619IEnumerable<(BranchWithInfo successorWithBranch, BranchWithInfo? preadjustSuccessorWithBranch)> GetSuccessorsWithAdjustedBranches(BasicBlock basicBlock) 654var destination = cfg.Blocks[firstFinally.FirstBlockOrdinal]; 665void UpdateFinallySuccessorsAndCatchInput(BranchWithInfo branch, TAnalysisData branchData, BasicBlock sourceBlock) 752BasicBlock block, 778protected abstract TBlockAnalysisResult ToBlockResult(BasicBlock basicBlock, TAnalysisData blockAnalysisData); 780private void UpdateInput(DataFlowAnalysisResultBuilder<TAnalysisData> builder, BasicBlock block, TAnalysisData newInput) 786private void CloneAndUpdateOutputIfEntryOrExitBlock(DataFlowAnalysisResultBuilder<TAnalysisData> builder, BasicBlock block, TAnalysisData newOutput) 805var block = cfg.Blocks[i];
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\DataFlowAnalysisResult.cs (3)
25private readonly ImmutableDictionary<BasicBlock, TBlockAnalysisResult> _basicBlockStateMap; 34ImmutableDictionary<BasicBlock, TBlockAnalysisResult> basicBlockStateMap, 97public TBlockAnalysisResult this[BasicBlock block] => _basicBlockStateMap[block];
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\DataFlowAnalysisResultBuilder.cs (8)
22private readonly PooledDictionary<BasicBlock, TAnalysisData?> _info; 27_info = PooledDictionary<BasicBlock, TAnalysisData?>.GetInstance(); 30public TAnalysisData? this[BasicBlock block] => _info[block]; 34internal void Add(BasicBlock block) 39internal void Update(BasicBlock block, TAnalysisData newData) 45Func<BasicBlock, TAnalysisData, TBlockAnalysisResult> getBlockResult, 62var resultBuilder = PooledDictionary<BasicBlock, TBlockAnalysisResult>.GetInstance(); 65var block = kvp.Key;
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\DataFlowOperationVisitor.cs (17)
55private BasicBlock? _currentBasicBlock; 185protected BasicBlock CurrentBasicBlock 227private Dictionary<BasicBlock, ThrownExceptionInfo>? _exceptionPathsThrownExceptionInfoMap; 234_exceptionPathsThrownExceptionInfoMap ??= new Dictionary<BasicBlock, ThrownExceptionInfo>(); 417public virtual TAnalysisData Flow(IOperation statement, BasicBlock block, TAnalysisData input) 439public TAnalysisData OnStartBlockAnalysis(BasicBlock block, TAnalysisData input) 471public TAnalysisData OnEndBlockAnalysis(BasicBlock block, TAnalysisData analysisData) 547private void OnStartEntryBlockAnalysis(BasicBlock entryBlock) 580private void OnStartExitBlockAnalysis(BasicBlock exitBlock) 647private void OnEndExitBlockAnalysis(BasicBlock exitBlock) 679BasicBlock fromBlock, 941BasicBlock currentBasicBlock, 1354protected virtual void UpdateReachability(BasicBlock basicBlock, TAnalysisData analysisData, bool isReachable) 1366private bool GetBlockReachability(BasicBlock basicBlock) 2078public TAnalysisData MergeAnalysisData(TAnalysisData value1, TAnalysisData value2, BasicBlock forBlock, bool forBackEdge) 2081protected virtual TAnalysisData MergeAnalysisData(TAnalysisData value1, TAnalysisData value2, BasicBlock forBlock) 2083protected virtual TAnalysisData MergeAnalysisDataForBackEdge(TAnalysisData value1, TAnalysisData value2, BasicBlock forBlock)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\PredicateAnalysisEntityDataFlowOperationVisitor.cs (1)
28protected override void UpdateReachability(BasicBlock basicBlock, TAnalysisData analysisData, bool isReachable)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\ThrownExceptionInfo.cs (5)
17BasicBlock block, 30internal static ThrownExceptionInfo Create(BasicBlock block, INamedTypeSymbol exceptionType, ImmutableStack<IOperation>? interproceduralCallStack) 35internal static ThrownExceptionInfo CreateDefaultInfoForExceptionsPathAnalysis(BasicBlock block, WellKnownTypeProvider wellKnownTypeProvider, ImmutableStack<IOperation>? interproceduralCallStack) 42private static ControlFlowRegion? GetHandlerRegion(BasicBlock block, INamedTypeSymbol exceptionType) 68internal ThrownExceptionInfo With(BasicBlock block, ImmutableStack<IOperation>? interproceduralCallStack)
Microsoft.CodeAnalysis.CodeStyle (40)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\BasicBlockExtensions.cs (1)
12public static IEnumerable<IOperation> DescendantOperations(this BasicBlock basicBlock)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\ControlFlowGraphExtensions.cs (4)
13public static BasicBlock EntryBlock(this ControlFlowGraph cfg) 15var firstBlock = cfg.Blocks[0]; 20public static BasicBlock ExitBlock(this ControlFlowGraph cfg) 22var lastBlock = cfg.Blocks.Last();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (1)
310foreach (var block in cfg.Blocks)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\CustomDataFlowAnalysis.cs (10)
38var unreachableBlocksToVisit = ArrayBuilder<BasicBlock>.GetInstance(); 67ImmutableArray<BasicBlock> blocks, 72ArrayBuilder<BasicBlock> unreachableBlocksToVisit, 80var firstBlock = blocks[firstBlockOrdinal]; 84var processedBlocks = PooledHashSet<BasicBlock>.GetInstance(); 91BasicBlock current; 104var unreachableBlock = unreachableBlocksToVisit[index]; 202void FollowBranch(BasicBlock current, ControlFlowBranch branch, TBlockAnalysisData currentAnalsisData) 230var destination = branch.Destination; 388var entryBlock = blocks[@catch.FirstBlockOrdinal];
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\DataFlowAnalyzer.cs (5)
19public abstract TBlockAnalysisData GetCurrentAnalysisData(BasicBlock basicBlock); 29public abstract void SetCurrentAnalysisData(BasicBlock basicBlock, TBlockAnalysisData data, CancellationToken cancellationToken); 34public abstract TBlockAnalysisData AnalyzeBlock(BasicBlock basicBlock, CancellationToken cancellationToken); 40public abstract TBlockAnalysisData AnalyzeNonConditionalBranch(BasicBlock basicBlock, TBlockAnalysisData currentAnalysisData, CancellationToken cancellationToken); 48BasicBlock basicBlock, TBlockAnalysisData currentAnalysisData, CancellationToken cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (1)
15/// Analysis data for a particular <see cref="BasicBlock"/> for <see cref="ControlFlowGraph"/>
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.cs (6)
88public override BasicBlockAnalysisData AnalyzeBlock(BasicBlock basicBlock, CancellationToken cancellationToken) 120BasicBlock basicBlock, 126BasicBlock basicBlock, 147BasicBlock basicBlock, 198public override BasicBlockAnalysisData GetCurrentAnalysisData(BasicBlock basicBlock) 204public override void SetCurrentAnalysisData(BasicBlock basicBlock, BasicBlockAnalysisData data, CancellationToken cancellationToken)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (12)
31private readonly PooledDictionary<BasicBlock, BasicBlockAnalysisData> _analysisDataByBasicBlockMap; 76PooledDictionary<BasicBlock, BasicBlockAnalysisData> analysisDataByBasicBlockMap, 164private static PooledDictionary<BasicBlock, BasicBlockAnalysisData> CreateAnalysisDataByBasicBlockMap( 167var builder = PooledDictionary<BasicBlock, BasicBlockAnalysisData>.GetInstance(); 168foreach (var block in cfg.Blocks) 201public BasicBlockAnalysisData GetBlockAnalysisData(BasicBlock basicBlock) 204public BasicBlockAnalysisData GetOrCreateBlockAnalysisData(BasicBlock basicBlock, CancellationToken cancellationToken) 344private void HandleCatchOrFilterOrFinallyInitialization(BasicBlock basicBlock, CancellationToken cancellationToken) 397var firstBasicBlockInOutermostRegion = ControlFlowGraph.Blocks[containingTryCatchFinallyRegion.FirstBlockOrdinal]; 412public void SetCurrentBlockAnalysisDataFrom(BasicBlock basicBlock, CancellationToken cancellationToken) 424public void SetBlockAnalysisData(BasicBlock basicBlock, BasicBlockAnalysisData data) 427public void SetBlockAnalysisDataFrom(BasicBlock basicBlock, BasicBlockAnalysisData data, CancellationToken cancellationToken)
Microsoft.CodeAnalysis.Test.Utilities (37)
Compilation\ControlFlowGraphVerifier.cs (18)
111ImmutableArray<BasicBlock> blocks = graph.Blocks; 124var block = blocks[i]; 194var predecessor = predecessorBranch.Source; 368foreach (var block in blocks) 389BasicBlock block = blocks[i]; 457void verifyLeftRegions(BasicBlock block, PooledHashSet<CaptureId> longLivedIds, PooledHashSet<CaptureId> referencedIds, ArrayBuilder<ControlFlowRegion> regions, Func<string> finalGraph) 534bool isWithStatementTargetCapture(ControlFlowRegion region, BasicBlock block, CaptureId id) 561bool isConditionalXMLAccessReceiverCapture(ControlFlowRegion region, BasicBlock block, CaptureId id) 600bool isSwitchTargetCapture(ControlFlowRegion region, BasicBlock block, CaptureId id) 643bool isForEachEnumeratorCapture(ControlFlowRegion region, BasicBlock block, CaptureId id) 681bool isAggregateGroupCapture(IOperation operation, ControlFlowRegion region, BasicBlock block, CaptureId id) 752PooledHashSet<CaptureId> adjustAndGetEntryState(ArrayBuilder<PooledHashSet<CaptureId>> entryStates, BasicBlock block, PooledHashSet<CaptureId> state) 770PooledHashSet<CaptureId> state, IOperation operation, BasicBlock block, int operationIndex, 1038bool isConditionalAccessCaptureUsedAfterNullCheck(IOperation operation, ControlFlowRegion region, BasicBlock block, CaptureId id) 1323BasicBlock block = blocks[i]; 1569void validateBranch(BasicBlock fromBlock, ControlFlowBranch branch) 1646void validateLifetimeOfReferences(BasicBlock block, Func<string> finalGraph) 1769string getBlockId(BasicBlock block)
Compilation\FlowAnalysis\BasicBlockReachabilityDataFlowAnalyzer.cs (5)
29public override bool AnalyzeBlock(BasicBlock basicBlock, CancellationToken cancellationToken) 35public override bool AnalyzeNonConditionalBranch(BasicBlock basicBlock, bool currentIsReachable, CancellationToken cancellationToken) 47BasicBlock basicBlock, 61public override void SetCurrentAnalysisData(BasicBlock basicBlock, bool isReachable, CancellationToken cancellationToken) 66public override bool GetCurrentAnalysisData(BasicBlock basicBlock) => _visited[basicBlock.Ordinal];
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\CustomDataFlowAnalysis.cs (9)
38var unreachableBlocksToVisit = ArrayBuilder<BasicBlock>.GetInstance(); 67ImmutableArray<BasicBlock> blocks, 72ArrayBuilder<BasicBlock> unreachableBlocksToVisit, 80var firstBlock = blocks[firstBlockOrdinal]; 84var processedBlocks = PooledHashSet<BasicBlock>.GetInstance(); 91BasicBlock current; 202void FollowBranch(BasicBlock current, ControlFlowBranch branch, TBlockAnalysisData currentAnalsisData) 230var destination = branch.Destination; 388var entryBlock = blocks[@catch.FirstBlockOrdinal];
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\DataFlowAnalyzer.cs (5)
19public abstract TBlockAnalysisData GetCurrentAnalysisData(BasicBlock basicBlock); 29public abstract void SetCurrentAnalysisData(BasicBlock basicBlock, TBlockAnalysisData data, CancellationToken cancellationToken); 34public abstract TBlockAnalysisData AnalyzeBlock(BasicBlock basicBlock, CancellationToken cancellationToken); 40public abstract TBlockAnalysisData AnalyzeNonConditionalBranch(BasicBlock basicBlock, TBlockAnalysisData currentAnalysisData, CancellationToken cancellationToken); 48BasicBlock basicBlock, TBlockAnalysisData currentAnalysisData, CancellationToken cancellationToken);
Microsoft.CodeAnalysis.Workspaces (40)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\BasicBlockExtensions.cs (1)
12public static IEnumerable<IOperation> DescendantOperations(this BasicBlock basicBlock)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\ControlFlowGraphExtensions.cs (4)
13public static BasicBlock EntryBlock(this ControlFlowGraph cfg) 15var firstBlock = cfg.Blocks[0]; 20public static BasicBlock ExitBlock(this ControlFlowGraph cfg) 22var lastBlock = cfg.Blocks.Last();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (1)
310foreach (var block in cfg.Blocks)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\CustomDataFlowAnalysis.cs (10)
38var unreachableBlocksToVisit = ArrayBuilder<BasicBlock>.GetInstance(); 67ImmutableArray<BasicBlock> blocks, 72ArrayBuilder<BasicBlock> unreachableBlocksToVisit, 80var firstBlock = blocks[firstBlockOrdinal]; 84var processedBlocks = PooledHashSet<BasicBlock>.GetInstance(); 91BasicBlock current; 104var unreachableBlock = unreachableBlocksToVisit[index]; 202void FollowBranch(BasicBlock current, ControlFlowBranch branch, TBlockAnalysisData currentAnalsisData) 230var destination = branch.Destination; 388var entryBlock = blocks[@catch.FirstBlockOrdinal];
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\DataFlowAnalyzer.cs (5)
19public abstract TBlockAnalysisData GetCurrentAnalysisData(BasicBlock basicBlock); 29public abstract void SetCurrentAnalysisData(BasicBlock basicBlock, TBlockAnalysisData data, CancellationToken cancellationToken); 34public abstract TBlockAnalysisData AnalyzeBlock(BasicBlock basicBlock, CancellationToken cancellationToken); 40public abstract TBlockAnalysisData AnalyzeNonConditionalBranch(BasicBlock basicBlock, TBlockAnalysisData currentAnalysisData, CancellationToken cancellationToken); 48BasicBlock basicBlock, TBlockAnalysisData currentAnalysisData, CancellationToken cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (1)
15/// Analysis data for a particular <see cref="BasicBlock"/> for <see cref="ControlFlowGraph"/>
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.cs (6)
88public override BasicBlockAnalysisData AnalyzeBlock(BasicBlock basicBlock, CancellationToken cancellationToken) 120BasicBlock basicBlock, 126BasicBlock basicBlock, 147BasicBlock basicBlock, 198public override BasicBlockAnalysisData GetCurrentAnalysisData(BasicBlock basicBlock) 204public override void SetCurrentAnalysisData(BasicBlock basicBlock, BasicBlockAnalysisData data, CancellationToken cancellationToken)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (12)
31private readonly PooledDictionary<BasicBlock, BasicBlockAnalysisData> _analysisDataByBasicBlockMap; 76PooledDictionary<BasicBlock, BasicBlockAnalysisData> analysisDataByBasicBlockMap, 164private static PooledDictionary<BasicBlock, BasicBlockAnalysisData> CreateAnalysisDataByBasicBlockMap( 167var builder = PooledDictionary<BasicBlock, BasicBlockAnalysisData>.GetInstance(); 168foreach (var block in cfg.Blocks) 201public BasicBlockAnalysisData GetBlockAnalysisData(BasicBlock basicBlock) 204public BasicBlockAnalysisData GetOrCreateBlockAnalysisData(BasicBlock basicBlock, CancellationToken cancellationToken) 344private void HandleCatchOrFilterOrFinallyInitialization(BasicBlock basicBlock, CancellationToken cancellationToken) 397var firstBasicBlockInOutermostRegion = ControlFlowGraph.Blocks[containingTryCatchFinallyRegion.FirstBlockOrdinal]; 412public void SetCurrentBlockAnalysisDataFrom(BasicBlock basicBlock, CancellationToken cancellationToken) 424public void SetBlockAnalysisData(BasicBlock basicBlock, BasicBlockAnalysisData data) 427public void SetBlockAnalysisDataFrom(BasicBlock basicBlock, BasicBlockAnalysisData data, CancellationToken cancellationToken)