ShaderTools.Hlsl.Parser.DirectiveParser.ParseElifDirective C# (CSharp) Method

ParseElifDirective() private method

private ParseElifDirective ( SyntaxToken hash, SyntaxToken keyword, bool isActive, bool endIsActive ) : DirectiveTriviaSyntax
hash SyntaxToken
keyword SyntaxToken
isActive bool
endIsActive bool
return DirectiveTriviaSyntax
        private DirectiveTriviaSyntax ParseElifDirective(SyntaxToken hash, SyntaxToken keyword, bool isActive, bool endIsActive)
        {
            _lexer.ExpandMacros = true;
            var expr = ParseDirectiveExpression();
            _lexer.ExpandMacros = false;

            var eod = ParseEndOfDirective(false);

            if (_directiveStack.HasPreviousIfOrElif())
            {
                var isTrue = EvaluateBool(expr);
                var branchTaken = endIsActive && isTrue && !_directiveStack.PreviousBranchTaken();
                return new ElifDirectiveTriviaSyntax(
                    hash, keyword, expr, eod,
                    endIsActive, branchTaken, isTrue);
            }

            eod = eod.WithLeadingTrivia(eod.LeadingTrivia.Add(new SyntaxTrivia(SyntaxKind.DisabledTextTrivia, expr.ToFullString(),
                expr.SourceRange, expr.GetTextSpan(),
                ImmutableArray<Diagnostic>.Empty)).ToArray());
            if (_directiveStack.HasUnfinishedIf())
                return WithDiagnostic(new BadDirectiveTriviaSyntax(hash, keyword, eod, isActive), DiagnosticId.EndIfDirectiveExpected);

            return WithDiagnostic(new BadDirectiveTriviaSyntax(hash, keyword, eod, isActive), DiagnosticId.UnexpectedDirective, keyword);
        }