private List <SyntaxToken> ExpandNestedMacro(NestedMacroExpansionLexer lexer)
        {
            var result = new List <SyntaxToken>();

            SyntaxToken token;

            while ((token = lexer.GetNextToken()) != null)
            {
                // Do token pasting (##).
                if (lexer.Peek(0) != null && lexer.Peek(0).Kind == SyntaxKind.HashHashToken &&
                    lexer.Peek(1) != null && lexer.Peek(1).Kind != SyntaxKind.HashHashToken)
                {
                    lexer.GetNextToken();
                    var concatenatedText = token.Text + lexer.GetNextToken().Text;
                    token = new HlslLexer(new StringText(concatenatedText)).Lex(LexerMode.Syntax);
                }

                List <SyntaxToken> expandedTokens;
                if (TryExpandMacro(token, lexer, out expandedTokens))
                {
                    result.AddRange(expandedTokens);
                }
                else
                {
                    result.Add(token);
                }
            }

            return(result);
        }
示例#2
0
        private List <SyntaxToken> ExpandNestedMacro(NestedMacroExpansionLexer lexer)
        {
            var result = new List <SyntaxToken>();

            SyntaxToken token;

            while ((token = lexer.GetNextToken()) != null)
            {
                List <SyntaxToken> expandedTokens;
                if (TryExpandMacro(token, lexer, out expandedTokens))
                {
                    result.AddRange(expandedTokens);
                }
                else
                {
                    result.Add(token);
                }
            }

            return(result);
        }
        private List<SyntaxToken> ExpandNestedMacro(NestedMacroExpansionLexer lexer)
        {
            var result = new List<SyntaxToken>();

            SyntaxToken token;
            while ((token = lexer.GetNextToken()) != null)
            {
                // Do token pasting (##).
                if (lexer.Peek(0) != null && lexer.Peek(0).Kind == SyntaxKind.HashHashToken
                    && lexer.Peek(1) != null && lexer.Peek(1).Kind != SyntaxKind.HashHashToken)
                {
                    lexer.GetNextToken();
                    var concatenatedText = token.Text + lexer.GetNextToken().Text;
                    token = new HlslLexer(new StringText(concatenatedText)).Lex(LexerMode.Syntax);
                }

                List<SyntaxToken> expandedTokens;
                if (TryExpandMacro(token, lexer, out expandedTokens))
                    result.AddRange(expandedTokens);
                else
                    result.Add(token);
            }

            return result;
        }
        private List<SyntaxToken> ExpandNestedMacro(NestedMacroExpansionLexer lexer)
        {
            var result = new List<SyntaxToken>();

            SyntaxToken token;
            while ((token = lexer.GetNextToken()) != null)
            {
                List<SyntaxToken> expandedTokens;
                if (TryExpandMacro(token, lexer, out expandedTokens))
                    result.AddRange(expandedTokens);
                else
                    result.Add(token);
            }

            return result;
        }