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();
}
}