ShaderTools.Hlsl.Parser.HlslLexer.LexDirectiveAndExcludedTrivia C# (CSharp) Method

LexDirectiveAndExcludedTrivia() private method

private LexDirectiveAndExcludedTrivia ( bool afterNonWhitespaceOnLine, List triviaList ) : bool
afterNonWhitespaceOnLine bool
triviaList List
return bool
        private bool LexDirectiveAndExcludedTrivia(
            bool afterNonWhitespaceOnLine,
            List<SyntaxNode> triviaList)
        {
            var directive = LexSingleDirective(true, true, afterNonWhitespaceOnLine, triviaList);

            if (directive.Kind == SyntaxKind.IncludeDirectiveTrivia)
            {
                var includeDirective = (IncludeDirectiveTriviaSyntax)directive;
                var includeFilename = includeDirective.TrimmedFilename;

                SourceText include;
                try
                {
                    include = _fileSystem.GetInclude(includeFilename);
                    if (include == null)
                    {
                        includeDirective = includeDirective.WithDiagnostic(Diagnostic.Format(includeDirective.GetTextSpan(), DiagnosticId.IncludeNotFound, includeFilename));
                        triviaList.Add(includeDirective);
                    }
                }
                catch (Exception ex)
                {
                    includeDirective = includeDirective.WithDiagnostic(new Diagnostic(includeDirective.GetTextSpan(), DiagnosticId.IncludeNotFound, ex.Message));
                    include = null;
                    triviaList.Add(includeDirective);
                }

                if (include != null)
                {
                    triviaList.Add(includeDirective);
                    PushIncludeContext(include);
                    return false;
                }
            }

            // also lex excluded stuff
            var branching = directive as BranchingDirectiveTriviaSyntax;
            if (branching != null && !branching.BranchTaken)
                LexExcludedDirectivesAndTrivia(true, triviaList);

            return true;
        }