ShaderTools.Hlsl.Parser.HlslParser.ScanNonArrayType C# (CSharp) Method

ScanNonArrayType() private method

private ScanNonArrayType ( SyntaxToken &lastTokenOfType ) : ScanTypeFlags
lastTokenOfType SyntaxToken
return ScanTypeFlags
        private ScanTypeFlags ScanNonArrayType(out SyntaxToken lastTokenOfType)
        {
            ScanTypeFlags result;
            if (Current.Kind == SyntaxKind.IdentifierToken && Current.ContextualKind == SyntaxKind.IdentifierToken)
            {
                lastTokenOfType = NextToken();
                while (Current.Kind == SyntaxKind.ColonColonToken)
                {
                    NextToken();
                    if (Current.Kind != SyntaxKind.IdentifierToken)
                    {
                        lastTokenOfType = null;
                        return ScanTypeFlags.NotType;
                    }
                    lastTokenOfType = NextToken();
                }
                result = ScanTypeFlags.TypeOrExpression;
            }
            else if (SyntaxFacts.IsPredefinedType(Current))
            {
                if (Current.Kind == SyntaxKind.UnsignedKeyword)
                {
                    if (Lookahead.Kind != SyntaxKind.IntKeyword)
                    {
                        // Can't be a type!
                        lastTokenOfType = null;
                        return ScanTypeFlags.NotType;
                    }
                    else
                    {
                        NextToken();
                    }
                }
                if (Lookahead.Kind == SyntaxKind.LessThanToken)
                {
                    NextToken();
                    // Generic type.
                    while (Current.Kind != SyntaxKind.EndOfFileToken)
                    {
                        NextToken();
                        if (Current.Kind == SyntaxKind.GreaterThanToken)
                            break;
                    }
                }
                lastTokenOfType = NextToken();
                result = ScanTypeFlags.MustBeType;
            }
            else if (Current.Kind == SyntaxKind.StructKeyword)
            {
                var unused = ParseStructType();
                lastTokenOfType = unused.CloseBraceToken;
                result = ScanTypeFlags.MustBeType;
            }
            else if (Current.Kind == SyntaxKind.ClassKeyword)
            {
                var unused = ParseClassType();
                lastTokenOfType = unused.CloseBraceToken;
                result = ScanTypeFlags.MustBeType;
            }
            else if (Current.Kind == SyntaxKind.InterfaceKeyword)
            {
                var unused = ParseInterfaceType();
                lastTokenOfType = unused.CloseBraceToken;
                result = ScanTypeFlags.MustBeType;
            }
            else
            {
                // Can't be a type!
                lastTokenOfType = null;
                return ScanTypeFlags.NotType;
            }

            return result;
        }
HlslParser