コード例 #1
0
 public AssemblyQualifiedTypeName(NonQualifiedTypeName nonQualifiedTypeName, RuntimeAssemblyName assemblyName)
 {
     Debug.Assert(nonQualifiedTypeName != null);
     Debug.Assert(assemblyName != null);
     _nonQualifiedTypeName = nonQualifiedTypeName;
     _assemblyName         = assemblyName;
 }
コード例 #2
0
ファイル: TypeName.cs プロジェクト: tijoytom/corert
 public AssemblyQualifiedTypeName(NonQualifiedTypeName nonQualifiedTypeName, RuntimeAssemblyName assemblyName)
 {
     Debug.Assert(nonQualifiedTypeName != null);
     Debug.Assert(assemblyName != null);
     _nonQualifiedTypeName = nonQualifiedTypeName;
     _assemblyName = assemblyName;
 }
コード例 #3
0
ファイル: TypeParser.cs プロジェクト: noahfalk/corert
        //
        // Parse a generic argument. In particular, generic arguments can take the special form [<typename>,<assemblyname>].
        //
        private TypeName ParseGenericTypeArgument()
        {
            TokenType token = _lexer.GetNextToken();

            if (token == TokenType.Other)
            {
                NonQualifiedTypeName nonQualifiedTypeName = ParseNonQualifiedTypeName();
                return(new AssemblyQualifiedTypeName(nonQualifiedTypeName, null));
            }
            else if (token == TokenType.OpenSqBracket)
            {
                RuntimeAssemblyName  assemblyName = null;
                NonQualifiedTypeName typeName     = ParseNonQualifiedTypeName();
                token = _lexer.GetNextToken();
                if (token == TokenType.Comma)
                {
                    assemblyName = _lexer.GetNextEmbeddedAssemblyName();
                    token        = _lexer.GetNextToken();
                }
                if (token != TokenType.CloseSqBracket)
                {
                    throw new ArgumentException();
                }
                return(new AssemblyQualifiedTypeName(typeName, assemblyName));
            }
            else
            {
                throw new ArgumentException();
            }
        }
コード例 #4
0
        //
        // Parses a typename. The typename may be optionally postpended with a "," followed by a legal assembly name.
        //
        private static TypeName ParseAssemblyQualifiedTypeName(String s)
        {
            if (string.IsNullOrEmpty(s))
            {
                return(null);
            }

            // Desktop compat: a whitespace-only "typename" qualified by an assembly name throws an ArgumentException rather than
            // a TypeLoadException.
            int idx = 0;

            while (idx < s.Length && Char.IsWhiteSpace(s[idx]))
            {
                idx++;
            }
            if (idx < s.Length && s[idx] == ',')
            {
                throw new ArgumentException();
            }

            try
            {
                TypeParser           parser   = new TypeParser(s);
                NonQualifiedTypeName typeName = parser.ParseNonQualifiedTypeName();
                TokenType            token    = parser._lexer.GetNextToken();
                if (token == TokenType.End)
                {
                    return(typeName);
                }
                if (token == TokenType.Comma)
                {
                    RuntimeAssemblyName assemblyName = parser._lexer.GetNextAssemblyName();
                    token = parser._lexer.Peek;
                    if (token != TokenType.End)
                    {
                        throw new ArgumentException();
                    }
                    return(new AssemblyQualifiedTypeName(typeName, assemblyName));
                }
                throw new ArgumentException();
            }
            catch (TypeLexer.IllegalEscapeSequenceException)
            {
                // Emulates a CLR4.5 bug that causes any string that contains an illegal escape sequence to be parsed as the empty string.
                return(ParseAssemblyQualifiedTypeName(String.Empty));
            }
        }
コード例 #5
0
        //
        // Parses a type name without any assembly name qualification.
        //
        private NonQualifiedTypeName ParseNonQualifiedTypeName()
        {
            // Parse the named type or constructed generic type part first.
            NonQualifiedTypeName typeName = ParseNamedOrConstructedGenericTypeName();

            // Iterate through any "has-element" qualifiers ([], &, *).
            for (;;)
            {
                TokenType token = _lexer.Peek;
                if (token == TokenType.End)
                {
                    break;
                }
                if (token == TokenType.Asterisk)
                {
                    _lexer.Skip();
                    typeName = new PointerTypeName(typeName);
                }
                else if (token == TokenType.Ampersand)
                {
                    _lexer.Skip();
                    typeName = new ByRefTypeName(typeName);
                }
                else if (token == TokenType.OpenSqBracket)
                {
                    _lexer.Skip();
                    token = _lexer.GetNextToken();
                    if (token == TokenType.Asterisk)
                    {
                        typeName = new MultiDimArrayTypeName(typeName, 1);
                        token    = _lexer.GetNextToken();
                    }
                    else
                    {
                        int rank = 1;
                        while (token == TokenType.Comma)
                        {
                            token = _lexer.GetNextToken();
                            rank++;
                        }
                        if (rank == 1)
                        {
                            typeName = new ArrayTypeName(typeName);
                        }
                        else
                        {
                            typeName = new MultiDimArrayTypeName(typeName, rank);
                        }
                    }
                    if (token != TokenType.CloseSqBracket)
                    {
                        throw new ArgumentException();
                    }
                }
                else
                {
                    break;
                }
            }
            return(typeName);
        }
コード例 #6
0
ファイル: TypeName.cs プロジェクト: noahfalk/corert
 public AssemblyQualifiedTypeName(NonQualifiedTypeName typeName, RuntimeAssemblyName assemblyName)
 {
     Debug.Assert(typeName != null);
     TypeName = typeName;
     AssemblyName = assemblyName;
 }
コード例 #7
0
 public AssemblyQualifiedTypeName(NonQualifiedTypeName typeName, RuntimeAssemblyName assemblyName)
 {
     Debug.Assert(typeName != null);
     TypeName     = typeName;
     AssemblyName = assemblyName;
 }