public static void IssueDiagnostics(
            CSharpCompilation compilation,
            BoundNode node,
            BindingDiagnosticBag diagnostics,
            MethodSymbol containingSymbol
            )
        {
            Debug.Assert(node != null);
            Debug.Assert((object)containingSymbol != null);

            ExecutableCodeBinder.ValidateIteratorMethod(compilation, containingSymbol, diagnostics);

            try
            {
                var diagnosticPass = new DiagnosticsPass(
                    compilation,
                    diagnostics,
                    containingSymbol
                    );
                diagnosticPass.Visit(node);
            }
            catch (CancelledByStackGuardException ex)
            {
                ex.AddAnError(diagnostics);
            }
        }
        public override BoundNode VisitLocalFunctionStatement(BoundLocalFunctionStatement node)
        {
            ExecutableCodeBinder.ValidateIteratorMethod(_compilation, node.Symbol, _diagnostics);

            var outerLocalFunction = _staticLocalFunction;

            if (node.Symbol.IsStatic)
            {
                _staticLocalFunction = node.Symbol;
            }
            var result = base.VisitLocalFunctionStatement(node);

            _staticLocalFunction = outerLocalFunction;
            return(result);
        }