Esempio n. 1
0
        private static TypeSymbol ResolveIntrinsicScalarType(ScalarTypeSyntax type)
        {
            var scalarType = SyntaxFacts.GetScalarType(type.TypeTokens.Select(x => x.Kind).ToArray());

            switch (scalarType)
            {
            case ScalarType.Void:
                return(IntrinsicTypes.Void);

            case ScalarType.Bool:
                return(IntrinsicTypes.Bool);

            case ScalarType.Int:
                return(IntrinsicTypes.Int);

            case ScalarType.Uint:
                return(IntrinsicTypes.Uint);

            case ScalarType.Half:
                return(IntrinsicTypes.Half);

            case ScalarType.Float:
                return(IntrinsicTypes.Float);

            case ScalarType.Double:
                return(IntrinsicTypes.Double);

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Esempio n. 2
0
        private BoundScalarType BindScalarType(ScalarTypeSyntax node)
        {
            var scalarType = TypeFacts.GetScalarType(node);

            switch (scalarType)
            {
            case ScalarType.Void:
                return(new BoundScalarType(IntrinsicTypes.Void));

            case ScalarType.Bool:
                return(new BoundScalarType(IntrinsicTypes.Bool));

            case ScalarType.Int:
                return(new BoundScalarType(IntrinsicTypes.Int));

            case ScalarType.Uint:
                return(new BoundScalarType(IntrinsicTypes.Uint));

            case ScalarType.Half:
                return(new BoundScalarType(IntrinsicTypes.Half));

            case ScalarType.Float:
                return(new BoundScalarType(IntrinsicTypes.Float));

            case ScalarType.Double:
                return(new BoundScalarType(IntrinsicTypes.Double));

            case ScalarType.String:
                return(new BoundScalarType(IntrinsicTypes.String));

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Esempio n. 3
0
 private BoundScalarType BindScalarType(ScalarTypeSyntax node)
 {
     var scalarType = TypeFacts.GetScalarType(node);
     switch (scalarType)
     {
         case ScalarType.Void:
             return new BoundScalarType(IntrinsicTypes.Void);
         case ScalarType.Bool:
             return new BoundScalarType(IntrinsicTypes.Bool);
         case ScalarType.Int:
             return new BoundScalarType(IntrinsicTypes.Int);
         case ScalarType.Uint:
             return new BoundScalarType(IntrinsicTypes.Uint);
         case ScalarType.Half:
             return new BoundScalarType(IntrinsicTypes.Half);
         case ScalarType.Float:
             return new BoundScalarType(IntrinsicTypes.Float);
         case ScalarType.Double:
             return new BoundScalarType(IntrinsicTypes.Double);
         case ScalarType.Min16Float:
             return new BoundScalarType(IntrinsicTypes.Min16Float);
         case ScalarType.Min10Float:
             return new BoundScalarType(IntrinsicTypes.Min10Float);
         case ScalarType.Min16Int:
             return new BoundScalarType(IntrinsicTypes.Min16Int);
         case ScalarType.Min12Int:
             return new BoundScalarType(IntrinsicTypes.Min12Int);
         case ScalarType.Min16Uint:
             return new BoundScalarType(IntrinsicTypes.Min16Uint);
         case ScalarType.String:
             return new BoundScalarType(IntrinsicTypes.String);
         default:
             throw new ArgumentOutOfRangeException();
     }
 }
Esempio n. 4
0
        internal static ScalarType GetScalarType(ScalarTypeSyntax node)
        {
            if (node.TypeTokens.Count == 2 && node.TypeTokens[0].Kind == SyntaxKind.UnsignedKeyword && node.TypeTokens[1].Kind == SyntaxKind.IntKeyword)
            {
                return(ScalarType.Uint);
            }

            Debug.Assert(node.TypeTokens.Count == 1);

            switch (node.TypeTokens[0].Kind)
            {
            case SyntaxKind.VoidKeyword:
                return(ScalarType.Void);

            case SyntaxKind.BoolKeyword:
                return(ScalarType.Bool);

            case SyntaxKind.IntKeyword:
            case SyntaxKind.DwordKeyword:
                return(ScalarType.Int);

            case SyntaxKind.UintKeyword:
                return(ScalarType.Uint);

            case SyntaxKind.HalfKeyword:
                return(ScalarType.Half);

            case SyntaxKind.FloatKeyword:
                return(ScalarType.Float);

            case SyntaxKind.DoubleKeyword:
                return(ScalarType.Double);

            case SyntaxKind.Min16FloatKeyword:
                return(ScalarType.Min16Float);

            case SyntaxKind.Min10FloatKeyword:
                return(ScalarType.Min10Float);

            case SyntaxKind.Min16IntKeyword:
                return(ScalarType.Min16Int);

            case SyntaxKind.Min12IntKeyword:
                return(ScalarType.Min12Int);

            case SyntaxKind.Min16UintKeyword:
                return(ScalarType.Min16Uint);

            case SyntaxKind.StringKeyword:
                return(ScalarType.String);

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Esempio n. 5
0
 private static TypeSymbol ResolveIntrinsicScalarType(ScalarTypeSyntax type)
 {
     var scalarType = SyntaxFacts.GetScalarType(type.TypeTokens.Select(x => x.Kind).ToArray());
     switch (scalarType)
     {
         case ScalarType.Void:
             return IntrinsicTypes.Void;
         case ScalarType.Bool:
             return IntrinsicTypes.Bool;
         case ScalarType.Int:
             return IntrinsicTypes.Int;
         case ScalarType.Uint:
             return IntrinsicTypes.Uint;
         case ScalarType.Half:
             return IntrinsicTypes.Half;
         case ScalarType.Float:
             return IntrinsicTypes.Float;
         case ScalarType.Double:
             return IntrinsicTypes.Double;
         default:
             throw new ArgumentOutOfRangeException();
     }
 }
Esempio n. 6
0
 public virtual void VisitScalarType(ScalarTypeSyntax node)
 {
     DefaultVisit(node);
 }
Esempio n. 7
0
 public GenericMatrixTypeSyntax(SyntaxToken matrixKeyword, SyntaxToken lessThanToken, ScalarTypeSyntax scalarType, SyntaxToken firstCommaToken, SyntaxToken rowsToken, SyntaxToken secondCommaToken, SyntaxToken colsToken, SyntaxToken greaterThanToken)
     : base(SyntaxKind.PredefinedGenericMatrixType)
 {
     RegisterChildNode(out MatrixKeyword, matrixKeyword);
     RegisterChildNode(out LessThanToken, lessThanToken);
     RegisterChildNode(out ScalarType, scalarType);
     RegisterChildNode(out FirstCommaToken, firstCommaToken);
     RegisterChildNode(out RowsToken, rowsToken);
     RegisterChildNode(out SecondCommaToken, secondCommaToken);
     RegisterChildNode(out ColsToken, colsToken);
     RegisterChildNode(out GreaterThanToken, greaterThanToken);
 }
Esempio n. 8
0
 public virtual void VisitScalarType(ScalarTypeSyntax node)
 {
     DefaultVisit(node);
 }
Esempio n. 9
0
        internal static ScalarType GetScalarType(ScalarTypeSyntax node)
        {
            if (node.TypeTokens.Count == 2 && node.TypeTokens[0].Kind == SyntaxKind.UnsignedKeyword && node.TypeTokens[1].Kind == SyntaxKind.IntKeyword)
                return ScalarType.Uint;

            Debug.Assert(node.TypeTokens.Count == 1);

            switch (node.TypeTokens[0].Kind)
            {
                case SyntaxKind.VoidKeyword:
                    return ScalarType.Void;
                case SyntaxKind.BoolKeyword:
                    return ScalarType.Bool;
                case SyntaxKind.IntKeyword:
                case SyntaxKind.DwordKeyword:
                    return ScalarType.Int;
                case SyntaxKind.UintKeyword:
                    return ScalarType.Uint;
                case SyntaxKind.HalfKeyword:
                    return ScalarType.Half;
                case SyntaxKind.FloatKeyword:
                    return ScalarType.Float;
                case SyntaxKind.DoubleKeyword:
                    return ScalarType.Double;
                case SyntaxKind.StringKeyword:
                    return ScalarType.String;
                default:
                    throw new ArgumentOutOfRangeException();
            }
        }
Esempio n. 10
0
 public GenericVectorTypeSyntax(SyntaxToken vectorKeyword, SyntaxToken lessThanToken, ScalarTypeSyntax scalarType, SyntaxToken commaToken, SyntaxToken sizeToken, SyntaxToken greaterThanToken)
     : base(SyntaxKind.PredefinedGenericVectorType)
 {
     RegisterChildNode(out VectorKeyword, vectorKeyword);
     RegisterChildNode(out LessThanToken, lessThanToken);
     RegisterChildNode(out ScalarType, scalarType);
     RegisterChildNode(out CommaToken, commaToken);
     RegisterChildNode(out SizeToken, sizeToken);
     RegisterChildNode(out GreaterThanToken, greaterThanToken);
 }
        public static void SetType(TypeSyntax typeSyntax)
        {
            if (!IsGroupOpen())
            {
                return;
            }

            if (typeSyntax.Kind == SyntaxKind.PredefinedScalarType)
            {
                _activeVar.IsScalar = true;

                ScalarTypeSyntax stSyntax = (ScalarTypeSyntax)typeSyntax;
                if (stSyntax.TypeTokens.Count == 2)
                {
                    _activeVar.DataType = GetDataType(stSyntax.TypeTokens[1].ValueText);
                    if (_activeVar.DataType == DataType.Int && stSyntax.TypeTokens[0].ValueText.Equals("unsigned"))
                    {
                        _activeVar.DataType = DataType.Uint;
                    }
                }
                else if (stSyntax.TypeTokens.Count == 1)
                {
                    _activeVar.DataType = GetDataType(stSyntax.TypeTokens[0].ValueText);
                }
                else
                {
                    _varValid = false;
                }
            }
            else if (typeSyntax.Kind == SyntaxKind.PredefinedVectorType)
            {
                _activeVar.IsVector = true;

                VectorTypeSyntax vtSyntax    = (VectorTypeSyntax)typeSyntax;
                string           syntaxToken = vtSyntax.TypeToken.ValueText;
                _activeVar.DataType = GetDataType(syntaxToken);
                ParseVectorColumns(syntaxToken);
            }
            else if (typeSyntax.Kind == SyntaxKind.PredefinedMatrixType)
            {
                _activeVar.IsMatrix = true;

                MatrixTypeSyntax mtSyntax    = (MatrixTypeSyntax)typeSyntax;
                string           syntaxToken = mtSyntax.TypeToken.ValueText;
                _activeVar.DataType = GetDataType(syntaxToken);
                ParseMatrixDimensions(syntaxToken);
            }
            else if (typeSyntax.Kind == SyntaxKind.PredefinedObjectType)
            {
                PredefinedObjectTypeSyntax otSyntax = (PredefinedObjectTypeSyntax)typeSyntax;
                if (otSyntax.ObjectTypeToken.Kind == SyntaxKind.Texture2DKeyword)
                {
                    _activeVar.IsTexture = true;
                    _activeVar.DataType  = DataType.Texture;
                }
                else
                {
                    _varValid = false;
                }
            }
            else
            {
                _varValid = false;
            }
        }