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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
public virtual void VisitScalarType(ScalarTypeSyntax node) { DefaultVisit(node); }
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); }
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(); } }
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; } }