public BasicBlockAnalysisData AnalyzeLocalFunctionInvocation(
                IMethodSymbol localFunction,
                CancellationToken cancellationToken
                )
            {
                Debug.Assert(localFunction.IsLocalFunction());

                // Use the original definition of the local function for flow analysis.
                localFunction = localFunction.OriginalDefinition;

                if (!LambdaOrLocalFunctionsBeingAnalyzed.Add(localFunction))
                {
                    ResetState();
                    return(CurrentBlockAnalysisData);
                }
                else
                {
                    var result = AnalyzeLocalFunctionInvocationCore(
                        localFunction,
                        cancellationToken
                        );
                    LambdaOrLocalFunctionsBeingAnalyzed.Remove(localFunction);
                    return(result);
                }
            }
 public BasicBlockAnalysisData AnalyzeLambdaInvocation(IFlowAnonymousFunctionOperation lambda, CancellationToken cancellationToken)
 {
     if (!LambdaOrLocalFunctionsBeingAnalyzed.Add(lambda.Symbol))
     {
         ResetState();
         return(CurrentBlockAnalysisData);
     }
     else
     {
         var result = AnalyzeLambdaInvocationCore(lambda, cancellationToken);
         LambdaOrLocalFunctionsBeingAnalyzed.Remove(lambda.Symbol);
         return(result);
     }
 }