private TypeSignature ParseTypeName() { TypeSignature signature = null; while (true) { switch (CurrentToken.Kind) { case TokenKind.Identifier: { var token = EatToken(); var name = token.Text; signature = new QualifiedTypeSignature(signature, name); } break; case TokenKind.Keyword: if (signature == null) { // Expand special type keywords (Object, Integer, etc.) to qualified names. // This is only done for the first identifier in a qualified name. var specialType = GetSpecialType(CurrentToken.KeywordKind); if (specialType != SpecialType.None) { EatToken(); signature = specialType.GetTypeSignature(); Debug.Assert(signature != null); } if (signature == null) { throw InvalidSignature(); } } else { var token = EatToken(); var name = token.Text; signature = new QualifiedTypeSignature(signature, name); } break; default: throw InvalidSignature(); } if (IsStartOfTypeArguments()) { var typeArguments = ParseTypeArguments(); signature = new GenericTypeSignature( (QualifiedTypeSignature)signature, typeArguments ); } if (CurrentToken.Kind != TokenKind.Dot) { return(signature); } EatToken(); } }
internal static GenericTypeSignature Generic( QualifiedTypeSignature name, params TypeSignature[] typeArguments ) { Assert.True(typeArguments.Length > 0); return(new GenericTypeSignature(name, ImmutableArray.CreateRange(typeArguments))); }
internal static QualifiedTypeSignature Qualified(params string[] names) { QualifiedTypeSignature signature = null; foreach (var name in names) { signature = new QualifiedTypeSignature(signature, name); } return signature; }
internal static QualifiedTypeSignature Qualified(params string[] names) { QualifiedTypeSignature signature = null; foreach (var name in names) { signature = new QualifiedTypeSignature(signature, name); } return(signature); }
internal static GenericTypeSignature Generic(QualifiedTypeSignature name, params TypeSignature[] typeArguments) { Assert.True(typeArguments.Length > 0); return new GenericTypeSignature(name, ImmutableArray.CreateRange(typeArguments)); }