Esempio n. 1
0
 private PredefinedObjectTypeSyntax ParseBufferType(SyntaxToken token)
 {
     var lessThan = Match(SyntaxKind.LessThanToken);
     var scalarOrVectorType = ParseScalarOrVectorType();
     var greaterThan = Match(SyntaxKind.GreaterThanToken);
     var typeArgumentList = new TemplateArgumentListSyntax(lessThan,
         new SeparatedSyntaxList<ExpressionSyntax>(new List<SyntaxNode> { scalarOrVectorType }),
         greaterThan);
     return new PredefinedObjectTypeSyntax(token, typeArgumentList);
 }
Esempio n. 2
0
 public virtual void VisitTemplateArgumentList(TemplateArgumentListSyntax node)
 {
     DefaultVisit(node);
 }
Esempio n. 3
0
        private PredefinedObjectTypeSyntax ParseMultisampledTextureType(SyntaxToken token)
        {
            var lessThan = Match(SyntaxKind.LessThanToken);
            var type = ParseScalarOrVectorType();

            var arguments = new List<SyntaxNode> { type };
            if (Current.Kind == SyntaxKind.CommaToken)
            {
                var comma = Match(SyntaxKind.CommaToken);

                ExpressionSyntax samples;
                try
                {
                    CommaIsSeparatorStack.Push(true);
                    _greaterThanTokenIsNotOperator = true;
                    samples = ParseExpression();
                }
                finally
                {
                    _greaterThanTokenIsNotOperator = false;
                    CommaIsSeparatorStack.Pop();
                }

                arguments.Add(comma);
                arguments.Add(samples);
            }

            var greaterThan = Match(SyntaxKind.GreaterThanToken);
            var typeArgumentList = new TemplateArgumentListSyntax(lessThan,
                new SeparatedSyntaxList<ExpressionSyntax>(arguments),
                greaterThan);
            return new PredefinedObjectTypeSyntax(token, typeArgumentList);
        }
Esempio n. 4
0
 private PredefinedObjectTypeSyntax ParseTextureType(SyntaxToken token)
 {
     TemplateArgumentListSyntax templateArgumentList = null;
     if (Current.Kind == SyntaxKind.LessThanToken)
     {
         var lessThan = Match(SyntaxKind.LessThanToken);
         var type = ParseScalarOrVectorType();
         var greaterThan = Match(SyntaxKind.GreaterThanToken);
         templateArgumentList = new TemplateArgumentListSyntax(lessThan,
             new SeparatedSyntaxList<ExpressionSyntax>(new List<SyntaxNode> { type }),
             greaterThan);
     }
     return new PredefinedObjectTypeSyntax(token, templateArgumentList);
 }
Esempio n. 5
0
        private PredefinedObjectTypeSyntax ParsePatchType(SyntaxToken token)
        {
            var lessThan = Match(SyntaxKind.LessThanToken);
            var userDefinedType = ParseIdentifier();
            var comma = Match(SyntaxKind.CommaToken);

            ExpressionSyntax controlPoints;
            try
            {
                CommaIsSeparatorStack.Push(true);
                _greaterThanTokenIsNotOperator = true;
                controlPoints = ParseExpression();
            }
            finally
            {
                _greaterThanTokenIsNotOperator = false;
                CommaIsSeparatorStack.Pop();
            }

            var greaterThan = Match(SyntaxKind.GreaterThanToken);
            var typeArgumentList = new TemplateArgumentListSyntax(lessThan,
                new SeparatedSyntaxList<ExpressionSyntax>(new List<SyntaxNode> { userDefinedType, comma, controlPoints }),
                greaterThan);
            return new PredefinedObjectTypeSyntax(token, typeArgumentList);
        }
        private PredefinedObjectTypeSyntax ParseObjectType(SyntaxToken token)
        {
            switch (token.Kind)
            {
            case SyntaxKind.BufferKeyword:
            case SyntaxKind.RasterizerOrderedBufferKeyword:
            case SyntaxKind.RWBufferKeyword:
                return(ParseBufferType(token));

            case SyntaxKind.ByteAddressBufferKeyword:
            case SyntaxKind.RasterizerOrderedByteAddressBufferKeyword:
            case SyntaxKind.RWByteAddressBufferKeyword:
            case SyntaxKind.RasterizerStateKeyword:
            case SyntaxKind.BlendStateKeyword:
            case SyntaxKind.DepthStencilStateKeyword:
            case SyntaxKind.Texture2DLegacyKeyword:
            case SyntaxKind.TextureCubeLegacyKeyword:
            case SyntaxKind.SamplerKeyword:
            case SyntaxKind.Sampler1DKeyword:
            case SyntaxKind.Sampler2DKeyword:
            case SyntaxKind.Sampler3DKeyword:
            case SyntaxKind.SamplerCubeKeyword:
            case SyntaxKind.SamplerStateKeyword:
            case SyntaxKind.SamplerComparisonStateKeyword:
                return(new PredefinedObjectTypeSyntax(token, null));

            case SyntaxKind.InputPatchKeyword:
            case SyntaxKind.OutputPatchKeyword:
                return(ParsePatchType(token));

            case SyntaxKind.PointStreamKeyword:
            case SyntaxKind.LineStreamKeyword:
            case SyntaxKind.TriangleStreamKeyword:
                return(ParseStreamOutputType(token));

            case SyntaxKind.AppendStructuredBufferKeyword:
            case SyntaxKind.ConsumeStructuredBufferKeyword:
            case SyntaxKind.RasterizerOrderedStructuredBufferKeyword:
            case SyntaxKind.RWStructuredBufferKeyword:
            case SyntaxKind.StructuredBufferKeyword:
                return(ParseStructuredBufferType(token));

            case SyntaxKind.RasterizerOrderedTexture1DKeyword:
            case SyntaxKind.RasterizerOrderedTexture1DArrayKeyword:
            case SyntaxKind.RasterizerOrderedTexture2DKeyword:
            case SyntaxKind.RasterizerOrderedTexture2DArrayKeyword:
            case SyntaxKind.RasterizerOrderedTexture3DKeyword:
            case SyntaxKind.RWTexture1DKeyword:
            case SyntaxKind.RWTexture1DArrayKeyword:
            case SyntaxKind.RWTexture2DKeyword:
            case SyntaxKind.RWTexture2DArrayKeyword:
            case SyntaxKind.RWTexture3DKeyword:
            case SyntaxKind.Texture1DKeyword:
            case SyntaxKind.Texture1DArrayKeyword:
            case SyntaxKind.Texture2DKeyword:
            case SyntaxKind.Texture2DArrayKeyword:
            case SyntaxKind.Texture3DKeyword:
            case SyntaxKind.TextureCubeKeyword:
            case SyntaxKind.TextureCubeArrayKeyword:
                return(ParseTextureType(token));

            case SyntaxKind.Texture2DMSKeyword:
            case SyntaxKind.Texture2DMSArrayKeyword:
                return(ParseMultisampledTextureType(token));
            }

            switch (token.ContextualKind)
            {
            case SyntaxKind.TextureKeyword:
            case SyntaxKind.GeometryShaderKeyword:
            case SyntaxKind.PixelShaderKeyword:
            case SyntaxKind.VertexShaderKeyword:
                return(new PredefinedObjectTypeSyntax(token.WithKind(token.ContextualKind), null));

            case SyntaxKind.ConstantBufferKeyword:
                return(ParseTemplatedConstantBufferType(token));
            }

            TemplateArgumentListSyntax templateArgumentList = null;

            if (Current.Kind == SyntaxKind.LessThanToken)
            {
                templateArgumentList = ParseTemplateArgumentList();
            }
            return(new PredefinedObjectTypeSyntax(token, templateArgumentList));
        }