Binder\Binder.WithQueryLambdaParametersBinder.cs (1)
99var result = BindMemberOfType(node, node, name, 0, indexed: false, receiver, default(SeparatedSyntaxList<TypeSyntax>), default(ImmutableArray<TypeWithAnnotations>), lookupResult, BoundMethodGroupFlags.None, diagnostics);
Binder\Binder_Constraints.cs (10)
121ArrayBuilder<TypeWithAnnotations>? constraintTypes = null;
249constraintTypes = ArrayBuilder<TypeWithAnnotations>.GetInstance();
256var type = BindTypeOrConstraintKeyword(typeSyntax, diagnostics, out ConstraintContextualKeyword keyword);
347return (TypeParameterConstraintClause.Create(constraints, constraintTypes?.ToImmutableAndFree() ?? ImmutableArray<TypeWithAnnotations>.Empty), syntaxBuilder);
412var constraintTypeBuilder = ArrayBuilder<TypeWithAnnotations>.GetInstance();
417var constraintType = constraintTypes[i];
448TypeWithAnnotations constraintType,
485TypeWithAnnotations type,
487ArrayBuilder<TypeWithAnnotations> constraintTypes,
553static bool isValidConstraintType(TypeParameterSymbol typeParameter, TypeConstraintSyntax syntax, TypeWithAnnotations typeWithAnnotations, bool performOnlyCycleSafeValidation, BindingDiagnosticBag diagnostics)
Binder\Binder_Deconstruct.cs (12)
374return pending.SetInferredTypeWithAnnotations(TypeWithAnnotations.Create(type), this, diagnostics);
380return pending.SetInferredTypeWithAnnotations(TypeWithAnnotations.Create(type));
476var typesWithAnnotationsBuilder = ArrayBuilder<TypeWithAnnotations>.GetInstance(leftLength);
518typesWithAnnotationsBuilder.Add(TypeWithAnnotations.Create(mergedType));
550var typesWithAnnotationsBuilder = ArrayBuilder<TypeWithAnnotations>.GetInstance(count);
569typesWithAnnotationsBuilder.Add(TypeWithAnnotations.Create(value.Type));
655typeArgumentsWithAnnotations: default(ImmutableArray<TypeWithAnnotations>),
751var declType = BindVariableTypeWithAnnotations(component.Designation, diagnostics, component.Type.SkipScoped(out _).SkipRef(), ref isConst, out isVar, out alias);
802TypeWithAnnotations declTypeWithAnnotations,
853TypeWithAnnotations declTypeWithAnnotations)
865TypeWithAnnotations declTypeWithAnnotations,
947var fieldType = field.GetFieldType(this.FieldsBeingBound);
Binder\Binder_Expressions.cs (49)
368var type = new PointerTypeSymbol(TypeWithAnnotations.Create(boundStackAlloc.ElementType));
931var declType = BindVariableTypeWithAnnotations(node.Designation, diagnostics, node.Type.SkipScoped(out _).SkipRef(), ref isConst, out isVar, out alias);
939private BoundExpression BindDeclarationVariablesForErrorRecovery(TypeWithAnnotations declTypeWithAnnotations, VariableDesignationSyntax node, CSharpSyntaxNode syntax, BindingDiagnosticBag diagnostics)
941declTypeWithAnnotations = declTypeWithAnnotations.HasType ? declTypeWithAnnotations : TypeWithAnnotations.Create(CreateErrorType("var"));
980subExpressions.SelectAsArray(e => TypeWithAnnotations.Create(e.Type)),
1015var elementTypesWithAnnotations = ArrayBuilder<TypeWithAnnotations>.GetInstance(arguments.Count);
1047var elementTypeWithAnnotations = TypeWithAnnotations.Create(boundArgument.Type);
1232TypeWithAnnotations typeWithAnnotations = BindType(node.Type, diagnostics);
1373TypeWithAnnotations typeWithAnnotations = typeofBinder.BindType(typeSyntax, diagnostics, out alias);
1397private void CheckDisallowedAttributeDependentType(TypeWithAnnotations typeArgument, NameSyntax attributeName, BindingDiagnosticBag diagnostics)
1426TypeWithAnnotations typeWithAnnotations = this.BindType(typeSyntax, diagnostics, out alias);
1535TypeWithAnnotations typeWithAnnotations = this.BindType(node.Type, diagnostics, out AliasSymbol alias);
1592default(ImmutableArray<TypeWithAnnotations>);
2540TypeWithAnnotations targetTypeWithAnnotations = this.BindType(node.Type, diagnostics);
2701private BoundExpression BindCastCore(ExpressionSyntax node, BoundExpression operand, TypeWithAnnotations targetTypeWithAnnotations, bool wasCompilerGenerated, BindingDiagnosticBag diagnostics)
2789var targetElementTypesWithAnnotations = default(ImmutableArray<TypeWithAnnotations>);
2849ImmutableArray<TypeWithAnnotations> targetElementTypesWithAnnotations)
2880private BoundExpression BindExplicitNullableCastFromNonNullable(ExpressionSyntax node, BoundExpression operand, TypeWithAnnotations targetTypeWithAnnotations, BindingDiagnosticBag diagnostics)
2888TypeWithAnnotations underlyingTargetTypeWithAnnotations = targetTypeWithAnnotations.Type.GetNullableUnderlyingTypeWithAnnotations();
3131var declType = BindVariableTypeWithAnnotations(designation, diagnostics, typeSyntax, ref isConst, out isVar, out alias);
3178var declType = BindVariableTypeWithAnnotations(declarationExpression, diagnostics, typeSyntax, ref isConst, out isVar, out alias);
3509TypeWithAnnotations parameterTypeWithAnnotations,
3609TypeWithAnnotations paramsElementTypeOpt = result.ParamsElementTypeOpt;
3666void reportUnsafeIfNeeded(MemberResolutionResult<TMember> methodResult, BindingDiagnosticBag diagnostics, BoundExpression argument, TypeWithAnnotations parameterTypeWithAnnotations)
4087var arrayType = ArrayTypeSymbol.CreateCSharpArray(Compilation.Assembly, TypeWithAnnotations.Create(bestType), rank);
4116type: GetStackAllocType(node, TypeWithAnnotations.Create(bestType), diagnostics, out bool hasErrors),
4462var elementType = arrayType.ElementTypeWithAnnotations;
4547private TypeSymbol GetStackAllocType(SyntaxNode node, TypeWithAnnotations elementTypeWithAnnotations, BindingDiagnosticBag diagnostics, out bool hasErrors)
5047typeArgumentsWithAnnotations: ImmutableArray<TypeWithAnnotations>.Empty,
5142var typeWithAnnotations = BindType(node.Type, diagnostics);
6654var finalApplicableCandidates = GetCandidatesPassingFinalValidation(node, overloadResolutionResult, receiverOpt: null, default(ImmutableArray<TypeWithAnnotations>), invokedAsExtensionMethod: false, diagnostics);
7542ImmutableArray<TypeWithAnnotations> typeArgumentsWithAnnotations = rightHasTypeArguments ?
7544default(ImmutableArray<TypeWithAnnotations>);
7559var typeArgument = typeArgumentsWithAnnotations[i];
7587/// <see cref="MakeQueryInvocation(CSharpSyntaxNode, BoundExpression, string, TypeSyntax, TypeWithAnnotations, BindingDiagnosticBag, string)"/>.
7662var typeArguments = typeArgumentsSyntax.Count > 0 ? BindTypeArguments(typeArgumentsSyntax, diagnostics) : default(ImmutableArray<TypeWithAnnotations>);
7758ImmutableArray<TypeWithAnnotations> typeArguments,
7832ImmutableArray<TypeWithAnnotations> typeArguments,
7928ImmutableArray<TypeWithAnnotations> typeArgumentsWithAnnotations,
8144default(ImmutableArray<TypeWithAnnotations>),
8226ImmutableArray<TypeWithAnnotations> typeArgumentsWithAnnotations,
8303typeWithAnnotations: TypeWithAnnotations.Create(type));
8342ImmutableArray<TypeWithAnnotations> typeArgumentsWithAnnotations,
8463ImmutableArray<TypeWithAnnotations> typeArgumentsWithAnnotations,
9761var finalApplicableCandidates = GetCandidatesPassingFinalValidation(syntax, overloadResolutionResult, receiver, default(ImmutableArray<TypeWithAnnotations>), invokedAsExtensionMethod: false, diagnostics);
10797TypeWithAnnotations? returnTypeOverride = null)
10802var returnType = returnTypeOverride ?? methodSymbol.ReturnTypeWithAnnotations;
10882static bool checkConstraints(CSharpCompilation compilation, ConversionsBase conversions, NamedTypeSymbol delegateType, ImmutableArray<TypeWithAnnotations> typeArguments)
Binder\Binder_Patterns.cs (12)
332declType: TypeWithAnnotations.Create(narrowedType, NullableAnnotation.NotAnnotated),
858TypeWithAnnotations declType = BindType(typeSyntax, diagnostics, out AliasSymbol aliasOpt);
867TypeWithAnnotations declType,
926private TypeWithAnnotations BindRecursivePatternType(
942return TypeWithAnnotations.Create(inputType.StrippedType(), NullableAnnotation.NotAnnotated);
973TypeWithAnnotations declTypeWithAnnotations = BindRecursivePatternType(typeSyntax, inputType, diagnostics, ref hasErrors, out BoundTypeExpression? boundDeclType);
988positionalClause, declType, ImmutableArray<TypeWithAnnotations>.Empty, permitDesignations, ref hasErrors, patternsBuilder, diagnostics);
1156ImmutableArray<TypeWithAnnotations> elementTypesWithAnnotations,
1357var declType = TypeWithState.ForType(inputType).ToTypeWithAnnotations(Compilation);
1384addSubpatternsForTuple(ImmutableArray<TypeWithAnnotations>.Empty);
1433void addSubpatternsForTuple(ImmutableArray<TypeWithAnnotations> elementTypes)
1556typeArgumentsWithAnnotations: default(ImmutableArray<TypeWithAnnotations>),
Binder\Binder_Query.cs (8)
56var typeRestriction = BindTypeArgument(fromClause.Type, diagnostics);
397var castType = BindTypeArgument(join.Type, diagnostics);
818new AnonymousTypeField(fieldName, fieldValue.Syntax.Location, TypeWithAnnotations.Create(TypeOrError(fieldValue)), RefKind.None, ScopedKind.None);
842private UnboundLambda MakeQueryUnboundLambdaWithCast(RangeVariableMap qvm, RangeVariableSymbol parameter, ExpressionSyntax expression, TypeSyntax castTypeSyntax, TypeWithAnnotations castType, bool withDependencies)
880return MakeQueryInvocation(node, receiver, methodName, default(SeparatedSyntaxList<TypeSyntax>), default(ImmutableArray<TypeWithAnnotations>), ImmutableArray.Create(arg), diagnostics
893return MakeQueryInvocation(node, receiver, methodName, default(SeparatedSyntaxList<TypeSyntax>), default(ImmutableArray<TypeWithAnnotations>), args, diagnostics
900protected BoundCall MakeQueryInvocation(CSharpSyntaxNode node, BoundExpression receiver, string methodName, TypeSyntax typeArgSyntax, TypeWithAnnotations typeArg, BindingDiagnosticBag diagnostics
913protected BoundCall MakeQueryInvocation(CSharpSyntaxNode node, BoundExpression receiver, string methodName, SeparatedSyntaxList<TypeSyntax> typeArgsSyntax, ImmutableArray<TypeWithAnnotations> typeArgs, ImmutableArray<BoundExpression> args, BindingDiagnosticBag diagnostics
Binder\Binder_Statements.cs (13)
725TypeWithAnnotations declType = BindVariableTypeWithAnnotations(node.Declaration, diagnostics, typeSyntax, ref isConst, isVar: out isVar, alias: out alias);
784private TypeWithAnnotations BindVariableTypeWithAnnotations(CSharpSyntaxNode declarationNode, BindingDiagnosticBag diagnostics, TypeSyntax typeSyntax, ref bool isConst, out bool isVar, out AliasSymbol alias)
797TypeWithAnnotations declType = BindTypeOrVarKeyword(typeSyntax.SkipScoped(out _).SkipRef(), diagnostics, out isVar, out alias);
952TypeWithAnnotations declTypeOpt,
978TypeWithAnnotations declTypeOpt,
1023declTypeOpt = TypeWithAnnotations.Create(initializerType);
1028declTypeOpt = TypeWithAnnotations.Create(CreateErrorType("var"));
1043declTypeOpt = TypeWithAnnotations.Create(CreateErrorType("var"));
1365TypeSymbol pointerType = new PointerTypeSymbol(TypeWithAnnotations.Create(elementType));
1470return op1.SetInferredTypeWithAnnotations(TypeWithAnnotations.Create(inferredType));
2334var targetElementTypes = default(ImmutableArray<TypeWithAnnotations>);
2508ImmutableArray<TypeWithAnnotations> targetElementTypes)
2821TypeWithAnnotations declType = BindTypeOrVarKeyword(typeSyntax, diagnostics, out isVar, out alias);
Binder\Binder_Symbols.cs (36)
37internal TypeWithAnnotations BindTypeOrVarKeyword(TypeSyntax syntax, BindingDiagnosticBag diagnostics, out bool isVar)
57private TypeWithAnnotations BindTypeOrConstraintKeyword(TypeSyntax syntax, BindingDiagnosticBag diagnostics, out ConstraintContextualKeyword keyword)
78internal TypeWithAnnotations BindTypeOrVarKeyword(TypeSyntax syntax, BindingDiagnosticBag diagnostics, out bool isVar, out AliasSymbol alias)
302internal TypeWithAnnotations BindType(ExpressionSyntax syntax, BindingDiagnosticBag diagnostics, ConsList<TypeSymbol> basesBeingResolved = null, bool suppressUseSiteDiagnostics = false)
311internal TypeWithAnnotations BindType(ExpressionSyntax syntax, BindingDiagnosticBag diagnostics, out AliasSymbol alias, ConsList<TypeSymbol> basesBeingResolved = null)
341return TypeWithAnnotations.Create(new ExtendedErrorTypeSymbol(GetContainingNamespaceOrType(symbol.Symbol), symbol.Symbol, LookupResultKind.NotATypeOrNamespace, diagnosticInfo));
401/// stack frames due to their use of large struct like <see cref="TypeWithAnnotations"/>.
459return TypeWithAnnotations.Create(
475return TypeWithAnnotations.Create(AreNullableAnnotationsEnabled(tupleTypeSyntax.CloseParenToken), BindTupleType(tupleTypeSyntax, diagnostics, basesBeingResolved));
521void reportNullableReferenceTypesIfNeeded(SyntaxToken questionToken, TypeWithAnnotations typeArgument = default)
543TypeWithAnnotations typeArgument = BindType(typeArgumentSyntax, diagnostics, basesBeingResolved);
544TypeWithAnnotations constructedType = typeArgument.SetIsAnnotated(Compilation);
571return TypeWithAnnotations.Create(AreNullableAnnotationsEnabled(predefinedType.Keyword), type);
584return TypeWithAnnotations.Create(new ExtendedErrorTypeSymbol(left, LookupResultKind.NotATypeOrNamespace, diagnostics.Add(ErrorCode.ERR_ColColWithTypeAlias, node.Alias.Location, node.Alias.Identifier.Text)));
593var elementType = BindType(node.ElementType, diagnostics, basesBeingResolved);
601return TypeWithAnnotations.Create(new PointerTypeSymbol(elementType));
607return TypeWithAnnotations.Create(CreateErrorType());
611internal static CSDiagnosticInfo? GetNullableUnconstrainedTypeParameterDiagnosticIfNecessary(LanguageVersion languageVersion, in TypeWithAnnotations type)
627private TypeWithAnnotations BindArrayType(
634TypeWithAnnotations type = BindType(node.ElementType, diagnostics, basesBeingResolved);
670type = TypeWithAnnotations.Create(AreNullableAnnotationsEnabled(rankSpecifier.CloseBracketToken), array);
681var types = ArrayBuilder<TypeWithAnnotations>.GetInstance(numElements);
693var argumentType = BindType(argumentSyntax.Type, diagnostics, basesBeingResolved);
834return TypeWithAnnotations.Create(new ExtendedErrorTypeSymbol(qualifierOpt ?? this.Compilation.Assembly.GlobalNamespace, string.Empty, arity: 0, errorInfo: null));
860return TypeWithAnnotations.Create(new ExtendedErrorTypeSymbol(
868return TypeWithAnnotations.Create(errorResult);
1150private TypeWithAnnotations BindGenericSimpleNamespaceOrTypeOrAliasSymbol(
1256return TypeWithAnnotations.Create(AreNullableAnnotationsEnabled(node.TypeArgumentList.GreaterThanToken), resultType);
1337private ImmutableArray<TypeWithAnnotations> BindTypeArguments(SeparatedSyntaxList<TypeSyntax> typeArguments, BindingDiagnosticBag diagnostics, ConsList<TypeSymbol> basesBeingResolved = null)
1340var args = ArrayBuilder<TypeWithAnnotations>.GetInstance(typeArguments.Count);
1349private TypeWithAnnotations BindTypeArgument(TypeSyntax typeArgument, BindingDiagnosticBag diagnostics, ConsList<TypeSymbol> basesBeingResolved = null)
1363? TypeWithAnnotations.Create(UnboundArgumentErrorTypeSymbol.Instance)
1372private NamedTypeSymbol ConstructNamedTypeUnlessTypeArgumentOmitted(SyntaxNode typeSyntax, NamedTypeSymbol type, SeparatedSyntaxList<TypeSyntax> typeArgumentsSyntax, ImmutableArray<TypeWithAnnotations> typeArguments, BindingDiagnosticBag diagnostics)
1418ImmutableArray<TypeWithAnnotations> typeArguments,
1572ImmutableArray<TypeWithAnnotations> typeArguments,
1641TypeWithAnnotations type = right.TypeWithAnnotations;
Binder\ForEachLoopBinder.cs (15)
194TypeWithAnnotations inferredType;
227TypeWithAnnotations inferredType;
265TypeWithAnnotations iterationVariableType;
299TypeWithAnnotations declType = BindTypeOrVarKeyword(typeSyntax, diagnostics, out isVar, out alias);
303declType = inferredType.HasType ? inferredType : TypeWithAnnotations.Create(CreateErrorType("var"));
370iterationVariableType = inferredType.HasType ? inferredType : TypeWithAnnotations.Create(CreateErrorType("var"));
608internal TypeWithAnnotations InferCollectionElementType(BindingDiagnosticBag diagnostics, ExpressionSyntax collectionSyntax)
613GetEnumeratorInfoAndInferCollectionElementType(_syntax, collectionSyntax, ref collectionExpr, isAsync: IsAsync, isSpread: false, diagnostics, out TypeWithAnnotations inferredType, builder: out _);
666out TypeWithAnnotations inferredType,
680inferredType = TypeWithAnnotations.Create(DynamicTypeSymbol.Instance);
688inferredType = TypeWithAnnotations.Create(GetSpecialType(SpecialType.System_Char, diagnostics, collectionExpr.Syntax));
1163builder.ElementTypeWithAnnotations = builder.CurrentPropertyGetter?.ReturnTypeWithAnnotations ?? TypeWithAnnotations.Create(GetSpecialType(SpecialType.System_Object, diagnostics, errorLocationSyntax));
1285builder.ElementTypeWithAnnotations = TypeWithAnnotations.Create(
1293TypeWithAnnotations.Create(GetSpecialType(SpecialType.System_Char, diagnostics, syntax)) :
1422var typeArguments = ArrayBuilder<TypeWithAnnotations>.GetInstance();
Binder\Semantics\Conversions\ConversionsBase.cs (43)
1485if (anonymousFunction.HasExplicitReturnType(out var refKind, out var returnType))
1656internal static CollectionExpressionTypeKind GetCollectionExpressionTypeKind(CSharpCompilation compilation, TypeSymbol destination, out TypeWithAnnotations elementType)
1708internal static bool IsSpanOrListType(CSharpCompilation compilation, TypeSymbol targetType, WellKnownType spanType, [NotNullWhen(true)] out TypeWithAnnotations elementType)
1828internal bool HasTopLevelNullabilityIdentityConversion(TypeWithAnnotations source, TypeWithAnnotations destination)
1860internal bool HasTopLevelNullabilityImplicitConversion(TypeWithAnnotations source, TypeWithAnnotations destination)
1880private static bool IsPossiblyNullableTypeTypeParameter(in TypeWithAnnotations typeWithAnnotations)
1891public bool HasAnyNullabilityImplicitConversion(TypeWithAnnotations source, TypeWithAnnotations destination)
1961(ConversionsBase conversions, BoundExpression s, TypeWithAnnotations d, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> u, bool forCast) =>
1978(ConversionsBase conversions, TypeWithAnnotations s, TypeWithAnnotations d, bool _, ref CompoundUseSiteInfo<AssemblySymbol> u, bool _) =>
2281private delegate Conversion ClassifyConversionFromExpressionDelegate(ConversionsBase conversions, BoundExpression sourceExpression, TypeWithAnnotations destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast);
2282private delegate Conversion ClassifyConversionFromTypeDelegate(ConversionsBase conversions, TypeWithAnnotations source, TypeWithAnnotations destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast);
2296(ConversionsBase conversions, BoundExpression s, TypeWithAnnotations d, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> u, bool forCast)
2314(ConversionsBase conversions, BoundExpression s, TypeWithAnnotations d, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> u, bool forCast) =>
2367(ConversionsBase conversions, TypeWithAnnotations s, TypeWithAnnotations d, bool _, ref CompoundUseSiteInfo<AssemblySymbol> u, bool _) =>
2386(ConversionsBase conversions, TypeWithAnnotations s, TypeWithAnnotations d, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> u, bool forCast) =>
2407ImmutableArray<TypeWithAnnotations> sourceTypes;
2408ImmutableArray<TypeWithAnnotations> destTypes;
2592TypeWithAnnotations elementType = source.ElementTypeWithAnnotations;
2593TypeWithAnnotations argument0 = destinationAgg.TypeArgumentWithDefinitionUseSiteDiagnostics(0, ref useSiteInfo);
2603private bool HasImplicitReferenceConversion(TypeWithAnnotations source, TypeWithAnnotations destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
3162var typeParameters = ArrayBuilder<TypeWithAnnotations>.GetInstance();
3163var sourceTypeArguments = ArrayBuilder<TypeWithAnnotations>.GetInstance();
3164var destinationTypeArguments = ArrayBuilder<TypeWithAnnotations>.GetInstance();
3415bool hasConversion(RefKind refKind, TypeWithAnnotations sourceType, TypeWithAnnotations destinationType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
3966var spanElementType = ((NamedTypeSymbol)destination).TypeArgumentsWithDefinitionUseSiteDiagnostics(ref useSiteInfo)[0];
3973var spanElementType = ((NamedTypeSymbol)destination).TypeArgumentsWithDefinitionUseSiteDiagnostics(ref useSiteInfo)[0];
3983var sourceElementType = ((NamedTypeSymbol)source).TypeArgumentsWithDefinitionUseSiteDiagnostics(ref useSiteInfo)[0];
3984var destinationElementType = ((NamedTypeSymbol)destination).TypeArgumentsWithDefinitionUseSiteDiagnostics(ref useSiteInfo)[0];
3993var spanElementType = ((NamedTypeSymbol)destination).TypeArgumentsWithDefinitionUseSiteDiagnostics(ref useSiteInfo)[0];
4000bool hasCovariantConversion(TypeWithAnnotations source, TypeWithAnnotations destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
4006bool hasIdentityConversion(TypeWithAnnotations source, TypeWithAnnotations destination)
4029var spanElementType = ((NamedTypeSymbol)destination).TypeArgumentsWithDefinitionUseSiteDiagnostics(ref useSiteInfo)[0];
Binder\Semantics\OverloadResolution\MethodTypeInference.cs (164)
73public readonly ImmutableArray<TypeWithAnnotations> InferredTypeArguments;
82ImmutableArray<TypeWithAnnotations> inferredTypeArguments,
97internal abstract TypeWithAnnotations GetTypeWithAnnotations(BoundExpression expr);
99internal abstract TypeWithAnnotations GetMethodGroupResultType(BoundMethodGroup group, MethodSymbol method);
103internal override TypeWithAnnotations GetTypeWithAnnotations(BoundExpression expr)
105return TypeWithAnnotations.Create(expr.GetTypeOrFunctionType());
108internal override TypeWithAnnotations GetMethodGroupResultType(BoundMethodGroup group, MethodSymbol method)
136private readonly ImmutableArray<TypeWithAnnotations> _formalParameterTypes;
141private readonly (TypeWithAnnotations Type, bool FromFunctionType)[] _fixedResults;
142private readonly HashSet<TypeWithAnnotations>[] _exactBounds;
143private readonly HashSet<TypeWithAnnotations>[] _upperBounds;
144private readonly HashSet<TypeWithAnnotations>[] _lowerBounds;
174ImmutableArray<TypeWithAnnotations> formalParameterTypes,
319ImmutableArray<TypeWithAnnotations> formalParameterTypes,
332_fixedResults = new (TypeWithAnnotations, bool)[methodTypeParameters.Length];
333_exactBounds = new HashSet<TypeWithAnnotations>[methodTypeParameters.Length];
334_upperBounds = new HashSet<TypeWithAnnotations>[methodTypeParameters.Length];
335_lowerBounds = new HashSet<TypeWithAnnotations>[methodTypeParameters.Length];
401var fixedType = _fixedResults[i].Type;
429private ImmutableArray<TypeWithAnnotations> GetResults(out bool inferredFromFunctionType)
449var fixedResultType = _fixedResults[i].Type;
467_fixedResults[i] = (TypeWithAnnotations.Create(new ExtendedErrorTypeSymbol(_constructedContainingTypeOfMethod, _methodTypeParameters[i].Name, 0, null, false)), false);
484private bool IsUnfixedTypeParameter(TypeWithAnnotations type)
509private void AddBound(TypeWithAnnotations addedBound, HashSet<TypeWithAnnotations>[] collectedBounds, TypeWithAnnotations methodTypeParameterWithAnnotations)
518collectedBounds[methodTypeParameterIndex] = new HashSet<TypeWithAnnotations>(TypeWithAnnotations.EqualsComparer.ConsiderEverythingComparer);
544static (typeParameter, i, self) => self.IsUnfixed(i) ? TypeWithAnnotations.Create(typeParameter) : self._fixedResults[i].Type,
586TypeWithAnnotations target = _formalParameterTypes[arg];
594private void MakeExplicitParameterTypeInferences(Binder binder, BoundExpression argument, TypeWithAnnotations target, ExactOrBoundsKind kind, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
622var argumentType = _extensions.GetTypeWithAnnotations(argument);
638TypeWithAnnotations target,
654if (!binder.TryGetCollectionIterationType((ExpressionSyntax)argument.Syntax, targetType.StrippedType(), out TypeWithAnnotations targetElementType))
674TypeWithAnnotations target,
693private bool MakeExplicitParameterTypeInferences(Binder binder, BoundTupleLiteral argument, TypeWithAnnotations target, ExactOrBoundsKind kind, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
725var destType = destTypes[i];
843var formalType = _formalParameterTypes[arg];
849private void MakeOutputTypeInferences(Binder binder, BoundExpression argument, TypeWithAnnotations formalType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
872private void MakeOutputTypeInferences(Binder binder, BoundUnconvertedCollectionExpression argument, TypeWithAnnotations formalType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
879if (!binder.TryGetCollectionIterationType((ExpressionSyntax)argument.Syntax, formalType.Type, out TypeWithAnnotations targetElementType))
893private void MakeOutputTypeInferences(Binder binder, BoundTupleLiteral argument, TypeWithAnnotations formalType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
918var destType = destTypes[i];
1341private void OutputTypeInference(Binder binder, BoundExpression expression, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1366var sourceType = _extensions.GetTypeWithAnnotations(expression);
1374private bool InferredReturnTypeInference(BoundExpression source, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1392var returnType = delegateType.DelegateInvokeMethod.ReturnTypeWithAnnotations;
1398var inferredReturnType = InferReturnType(source, delegateType, ref useSiteInfo);
1447TypeWithAnnotations sourceReturnType = method.ReturnTypeWithAnnotations;
1466var returnType = MethodGroupReturnType(binder, originalMethodGroup, fixedParameters, method.RefKind, isFunctionPointerResolution, ref useSiteInfo, in callingConventionInfo);
1476private TypeWithAnnotations MethodGroupReturnType(
1495TypeWithAnnotations type = default;
1517private void ExplicitParameterTypeInference(BoundExpression source, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1572private void ExplicitReturnTypeInference(BoundExpression source, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1589if (!anonymousFunction.HasExplicitReturnType(out _, out TypeWithAnnotations anonymousFunctionReturnType))
1608private void ExactInference(TypeWithAnnotations source, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1662private bool ExactTypeParameterInference(TypeWithAnnotations source, TypeWithAnnotations target)
1677private bool ExactArrayInference(TypeWithAnnotations source, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1727var sourceElementType = GetSpanOrSZArrayElementType(source);
1728var targetElementType = GetSpanElementType(target);
1736private static TypeWithAnnotations GetSpanElementType(TypeSymbol type)
1742private static TypeWithAnnotations GetSpanOrSZArrayElementType(TypeSymbol type)
1756private void ExactOrBoundsInference(ExactOrBoundsKind kind, TypeWithAnnotations source, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1772private bool ExactOrBoundsNullableInference(ExactOrBoundsKind kind, TypeWithAnnotations source, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1792static bool isNullableOnly(TypeWithAnnotations type)
1796private bool ExactNullableInference(TypeWithAnnotations source, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1801private bool LowerBoundTupleInference(TypeWithAnnotations source, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1810ImmutableArray<TypeWithAnnotations> sourceTypes;
1811ImmutableArray<TypeWithAnnotations> targetTypes;
1828private bool ExactConstructedInference(TypeWithAnnotations source, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1858private bool ExactPointerInference(TypeWithAnnotations source, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1918var sourceTypeArguments = ArrayBuilder<TypeWithAnnotations>.GetInstance();
1919var targetTypeArguments = ArrayBuilder<TypeWithAnnotations>.GetInstance();
1939private void LowerBoundInference(TypeWithAnnotations source, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2033private bool LowerBoundTypeParameterInference(TypeWithAnnotations source, TypeWithAnnotations target)
2048private static TypeWithAnnotations GetMatchingElementType(ArrayTypeSymbol source, TypeSymbol target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2102var elementSource = arraySource.ElementTypeWithAnnotations;
2103var elementTarget = GetMatchingElementType(arraySource, target, ref useSiteInfo);
2139var sourceElementType = GetSpanOrSZArrayElementType(source);
2140var targetElementType = GetSpanElementType(target);
2159private bool LowerBoundNullableInference(TypeWithAnnotations source, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2361var sourceTypeArguments = ArrayBuilder<TypeWithAnnotations>.GetInstance();
2362var targetTypeArguments = ArrayBuilder<TypeWithAnnotations>.GetInstance();
2448private void UpperBoundInference(TypeWithAnnotations source, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2509private bool UpperBoundTypeParameterInference(TypeWithAnnotations source, TypeWithAnnotations target)
2523private bool UpperBoundArrayInference(TypeWithAnnotations source, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2541var elementTarget = arrayTarget.ElementTypeWithAnnotations;
2542var elementSource = GetMatchingElementType(arrayTarget, source.Type, ref useSiteInfo);
2560private bool UpperBoundNullableInference(TypeWithAnnotations source, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2565private bool UpperBoundConstructedInference(TypeWithAnnotations sourceWithAnnotations, TypeWithAnnotations targetWithAnnotations, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2711var sourceTypeArguments = ArrayBuilder<TypeWithAnnotations>.GetInstance();
2712var targetTypeArguments = ArrayBuilder<TypeWithAnnotations>.GetInstance();
2830private static (TypeWithAnnotations Type, bool FromFunctionType) Fix(
2834HashSet<TypeWithAnnotations>? exact,
2835HashSet<TypeWithAnnotations>? lower,
2836HashSet<TypeWithAnnotations>? upper,
2851var candidates = new Dictionary<TypeWithAnnotations, TypeWithAnnotations>(EqualsIgnoringDynamicTupleNamesAndNullabilityComparer.Instance);
2856Predicate<TypeWithAnnotations> lowerPredicate;
2901var initialCandidates = ArrayBuilder<TypeWithAnnotations>.GetInstance();
2926TypeWithAnnotations best = default;
2967best = TypeWithAnnotations.Create(resultType, best.NullableAnnotation);
2973static bool containsFunctionTypes([NotNullWhen(true)] HashSet<TypeWithAnnotations>? types)
2978static bool containsNonFunctionTypes([NotNullWhen(true)] HashSet<TypeWithAnnotations>? types)
2983static bool isFunctionType(TypeWithAnnotations type, [NotNullWhen(true)] out FunctionTypeSymbol? functionType)
3009private static bool ImplicitConversionExists(TypeWithAnnotations sourceWithAnnotations, TypeWithAnnotations destinationWithAnnotations, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, ConversionsBase conversions)
3033private TypeWithAnnotations InferReturnType(BoundExpression source, NamedTypeSymbol target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
3114var returnType = anonymousFunction.InferReturnType(_conversions, fixedDelegate, ref useSiteInfo, out bool inferredFromFunctionType);
3173public static ImmutableArray<TypeWithAnnotations> InferTypeArgumentsFromFirstArgument(
3237var dest = _formalParameterTypes[0];
3269private ImmutableArray<TypeWithAnnotations> GetInferredTypeArguments(out bool inferredFromFunctionType)
3271var builder = ArrayBuilder<TypeWithAnnotations>.GetInstance(_fixedResults.Length);
3291private static void GetAllCandidates(Dictionary<TypeWithAnnotations, TypeWithAnnotations> candidates, ArrayBuilder<TypeWithAnnotations> builder)
3304Dictionary<TypeWithAnnotations, TypeWithAnnotations> candidates,
3305HashSet<TypeWithAnnotations> bounds,
3306Predicate<TypeWithAnnotations>? predicate,
3310foreach (var candidate in bounds)
3317var type = candidate;
3333Dictionary<TypeWithAnnotations, TypeWithAnnotations> candidates,
3334TypeWithAnnotations newCandidate,
3337if (candidates.TryGetValue(newCandidate, out TypeWithAnnotations oldCandidate))
3348Dictionary<TypeWithAnnotations, TypeWithAnnotations> candidates,
3349HashSet<TypeWithAnnotations> bounds,
3350Predicate<TypeWithAnnotations>? predicate,
3351ArrayBuilder<TypeWithAnnotations> initialCandidates,
3360foreach (var bound in bounds)
3373TypeWithAnnotations source;
3374TypeWithAnnotations destination;
3388if (conversions.IncludeNullability && candidates.TryGetValue(bound, out var oldBound))
3395var newBound = TypeWithAnnotations.Create(oldBound.Type, newAnnotation);
3415Dictionary<TypeWithAnnotations, TypeWithAnnotations> candidates,
3416TypeWithAnnotations oldCandidate,
3417TypeWithAnnotations newCandidate,
3426if (candidates.TryGetValue(oldCandidate, out TypeWithAnnotations latest))
3437TypeWithAnnotations merged = latest.MergeEquivalentTypes(newCandidate, variance);
3446private sealed class EqualsIgnoringDynamicTupleNamesAndNullabilityComparer : EqualityComparer<TypeWithAnnotations>
3450public override int GetHashCode(TypeWithAnnotations obj)
3455public override bool Equals(TypeWithAnnotations x, TypeWithAnnotations y)
Binder\Semantics\OverloadResolution\OverloadResolution.cs (39)
138ArrayBuilder<TypeWithAnnotations> typeArguments,
174ArrayBuilder<TypeWithAnnotations> typeArguments = ArrayBuilder<TypeWithAnnotations>.GetInstance();
186ArrayBuilder<TypeWithAnnotations> typeArguments,
239var typeArguments = ArrayBuilder<TypeWithAnnotations>.GetInstance(0);
353ArrayBuilder<TypeWithAnnotations> typeArguments,
429ArrayBuilder<TypeWithAnnotations> typeArguments,
563var typeArgumentsBuilder = ArrayBuilder<TypeWithAnnotations>.GetInstance();
937if (IsValidParams(_binder, constructor, disallowExpandedNonArrayParams: false, out TypeWithAnnotations definitionElementType))
1000TypeWithAnnotations definitionParamsElementType,
1049ArrayBuilder<TypeWithAnnotations> typeArguments,
1184if ((options & Options.IsMethodGroupConversion) == 0 && IsValidParams(_binder, leastOverriddenMember, disallowExpandedNonArrayParams, out TypeWithAnnotations definitionElementType))
1285public static bool IsValidParams(Binder binder, Symbol member, bool disallowExpandedNonArrayParams, out TypeWithAnnotations definitionElementType)
1313public static bool TryInferParamsCollectionIterationType(Binder binder, TypeSymbol type, out TypeWithAnnotations elementType)
2558static TypeSymbol getParameterTypeAndRefKind(int i, MemberAnalysisResult result, ImmutableArray<ParameterSymbol> parameters, TypeWithAnnotations paramsElementTypeOpt, out RefKind parameter1RefKind)
3188CollectionExpressionTypeKind kind1 = ConversionsBase.GetCollectionExpressionTypeKind(Compilation, t1, out TypeWithAnnotations elementType1);
3189CollectionExpressionTypeKind kind2 = ConversionsBase.GetCollectionExpressionTypeKind(Compilation, t2, out TypeWithAnnotations elementType2);
3216if (type.IsArrayInterface(out TypeWithAnnotations typeArg))
3260var x = lambda.GetInferredReturnType(ref useSiteInfo, out _);
3674var x = lambda.InferReturnType(Conversions, d1, ref useSiteInfo, out _);
3783out ImmutableArray<TypeWithAnnotations> parameterTypes,
3799internal readonly ImmutableArray<TypeWithAnnotations> ParameterTypes;
3803internal EffectiveParameters(ImmutableArray<TypeWithAnnotations> types, ImmutableArray<RefKind> refKinds, int firstParamsElementIndex)
3839var types = ArrayBuilder<TypeWithAnnotations>.GetInstance();
3976var types = ArrayBuilder<TypeWithAnnotations>.GetInstance();
3982TypeWithAnnotations paramsIterationType = default;
3989var type = parameter.TypeWithAnnotations;
4025ArrayBuilder<TypeWithAnnotations> typeArguments,
4103ArrayBuilder<TypeWithAnnotations> typeArguments,
4105TypeWithAnnotations definitionParamsElementType,
4166ArrayBuilder<TypeWithAnnotations> typeArgumentsBuilder,
4170TypeWithAnnotations definitionParamsElementTypeOpt,
4191ImmutableArray<TypeWithAnnotations> typeArguments;
4304private ImmutableArray<TypeWithAnnotations> InferMethodTypeArguments(
4350return default(ImmutableArray<TypeWithAnnotations>);
4356return default(ImmutableArray<TypeWithAnnotations>);
4362TypeWithAnnotations definitionParamsElementTypeOpt,
4374TypeWithAnnotations paramsElementTypeOpt;
4380paramsElementTypeOpt = TypeWithAnnotations.Create(ErrorTypeSymbol.EmptyParamsCollectionElementTypeSentinel);
BoundTree\Constructors.cs (5)
543public BoundTypeExpression(SyntaxNode syntax, AliasSymbol? aliasOpt, BoundTypeExpression? boundContainingTypeOpt, ImmutableArray<BoundExpression> boundDimensionsOpt, TypeWithAnnotations typeWithAnnotations, bool hasErrors = false)
549public BoundTypeExpression(SyntaxNode syntax, AliasSymbol? aliasOpt, BoundTypeExpression? boundContainingTypeOpt, TypeWithAnnotations typeWithAnnotations, bool hasErrors = false)
554public BoundTypeExpression(SyntaxNode syntax, AliasSymbol? aliasOpt, TypeWithAnnotations typeWithAnnotations, bool hasErrors = false)
560: this(syntax, aliasOpt, null, TypeWithAnnotations.Create(type), hasErrors)
564public BoundTypeExpression(SyntaxNode syntax, AliasSymbol? aliasOpt, ImmutableArray<BoundExpression> dimensionsOpt, TypeWithAnnotations typeWithAnnotations, bool hasErrors = false)
BoundTree\UnboundLambda.cs (68)
44internal readonly TypeWithAnnotations TypeWithAnnotations;
54TypeWithAnnotations typeWithAnnotations,
106public TypeWithAnnotations GetInferredReturnType(ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out bool inferredFromFunctionType)
117public TypeWithAnnotations GetInferredReturnType(ConversionsBase? conversions, NullableWalker.VariableState? nullableState, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out bool inferredFromFunctionType)
144var returnTypes = ArrayBuilder<(BoundReturnStatement, TypeWithAnnotations)>.GetInstance();
169TypeWithAnnotations returnType,
170ImmutableArray<TypeWithAnnotations> parameterTypes,
185internal static InferredLambdaReturnType InferReturnType(ArrayBuilder<(BoundReturnStatement, TypeWithAnnotations)> returnTypes,
192internal static InferredLambdaReturnType InferReturnType(ArrayBuilder<(BoundReturnStatement, TypeWithAnnotations)> returnTypes,
202private static InferredLambdaReturnType InferReturnTypeImpl(ArrayBuilder<(BoundReturnStatement, TypeWithAnnotations)> returnTypes,
205var types = ArrayBuilder<(BoundExpression expr, TypeWithAnnotations resultType, bool isChecked)>.GetInstance();
227var bestType = CalculateReturnType(binder, conversions, delegateType, types, isAsync, node, ref useSiteInfo, out bool inferredFromFunctionType);
242private static TypeWithAnnotations CalculateReturnType(
246ArrayBuilder<(BoundExpression expr, TypeWithAnnotations resultType, bool isChecked)> returns,
252TypeWithAnnotations bestResultType;
278bestResultType = TypeWithAnnotations.Create(bestType);
290bestResultType = TypeWithAnnotations.Create(bestType);
320return TypeWithAnnotations.Create(resultType);
335return TypeWithAnnotations.Create(taskTypeT.Construct(ImmutableArray.Create(bestResultType)));
340private readonly ArrayBuilder<(BoundReturnStatement, TypeWithAnnotations)> _builder;
342private BlockReturns(ArrayBuilder<(BoundReturnStatement, TypeWithAnnotations)> builder)
347public static void GetReturnTypes(ArrayBuilder<(BoundReturnStatement, TypeWithAnnotations)> builder, BoundBlock block)
380_builder.Add((node, TypeWithAnnotations.Create(type)));
395TypeWithAnnotations returnType,
399ImmutableArray<TypeWithAnnotations> types,
462public bool HasExplicitReturnType(out RefKind refKind, out TypeWithAnnotations returnType)
468public TypeWithAnnotations InferReturnType(ConversionsBase conversions, NamedTypeSymbol delegateType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out bool inferredFromFunctionType)
478public TypeWithAnnotations ParameterTypeWithAnnotations(int index) { return Data.ParameterTypeWithAnnotations(index); }
556public abstract bool HasExplicitReturnType(out RefKind refKind, out TypeWithAnnotations returnType);
562public abstract TypeWithAnnotations ParameterTypeWithAnnotations(int index);
615var type = lambda.InferredReturnType.TypeWithAnnotations;
625var type = BindForErrorRecovery().InferredReturnType.TypeWithAnnotations;
638private static TypeWithAnnotations DelegateReturnTypeWithAnnotations(MethodSymbol? invokeMethod, out RefKind refKind)
649internal (ImmutableArray<RefKind>, ArrayBuilder<ScopedKind>, ImmutableArray<TypeWithAnnotations>, bool) CollectParameterProperties()
653var parameterTypesBuilder = ArrayBuilder<TypeWithAnnotations>.GetInstance(ParameterCount);
660var type = ParameterTypeWithAnnotations(i);
715if (!HasExplicitReturnType(out var returnRefKind, out var returnType))
719var returnTypes = ArrayBuilder<(BoundReturnStatement, TypeWithAnnotations)>.GetInstance();
761returnType = TypeWithAnnotations.Create(Binder.Compilation.GetSpecialType(SpecialType.System_Void));
779var returnType = DelegateReturnTypeWithAnnotations(invokeMethod, out RefKind refKind);
883TypeWithAnnotations returnType,
884ImmutableArray<TypeWithAnnotations> parameterTypes,
900var returnType = DelegateReturnTypeWithAnnotations(invokeMethod, out RefKind refKind);
905private void ValidateUnsafeParameters(BindingDiagnosticBag diagnostics, ImmutableArray<TypeWithAnnotations> targetParameterTypes)
932ImmutableArray<TypeWithAnnotations> parameterTypes,
935bool hasExplicitReturnType = HasExplicitReturnType(out var refKind, out var returnType);
954var returnTypes = ArrayBuilder<(BoundReturnStatement, TypeWithAnnotations)>.GetInstance();
964? TypeWithAnnotations.Create(this.Binder.Compilation.GetSpecialType(SpecialType.System_Void))
965: TypeWithAnnotations.Create(LambdaSymbol.InferenceFailureReturnType);
989ImmutableArray<TypeWithAnnotations> parameterTypes,
991TypeWithAnnotations returnType,
1025public readonly ImmutableArray<TypeWithAnnotations> ParameterTypes;
1029public static readonly ReturnInferenceCacheKey Empty = new ReturnInferenceCacheKey(ImmutableArray<TypeWithAnnotations>.Empty, ImmutableArray<RefKind>.Empty, null);
1031private ReturnInferenceCacheKey(ImmutableArray<TypeWithAnnotations> parameterTypes, ImmutableArray<RefKind> parameterRefKinds, NamedTypeSymbol? taskLikeReturnTypeOpt)
1071foreach (var type in ParameterTypes)
1091out ImmutableArray<TypeWithAnnotations> parameterTypes,
1097parameterTypes = ImmutableArray<TypeWithAnnotations>.Empty;
1106var typesBuilder = ArrayBuilder<TypeWithAnnotations>.GetInstance(parameterCount);
1183?? rebind(ReallyInferReturnType(delegateType: null, ImmutableArray<TypeWithAnnotations>.Empty, ImmutableArray<RefKind>.Empty));
1199ImmutableArray<TypeWithAnnotations> parameterTypes,
1202var returnType = inferredReturnType.TypeWithAnnotations;
1214returnType = TypeWithAnnotations.Create(t);
1429private readonly TypeWithAnnotations _returnType;
1433private readonly ImmutableArray<TypeWithAnnotations> _parameterTypesWithAnnotations;
1444TypeWithAnnotations returnType,
1448ImmutableArray<TypeWithAnnotations> parameterTypesWithAnnotations,
1474public override bool HasExplicitReturnType(out RefKind refKind, out TypeWithAnnotations returnType)
1552public override TypeWithAnnotations ParameterTypeWithAnnotations(int index)
Compilation\CSharpCompilation.cs (10)
2246var firstType = method.Parameters[0].TypeWithAnnotations;
2380return ArrayTypeSymbol.CreateCSharpArray(this.Assembly, TypeWithAnnotations.Create(elementType, elementNullableAnnotation), rank);
2393return new PointerTypeSymbol(TypeWithAnnotations.Create(elementType, elementNullableAnnotation));
4092var returnTypeWithAnnotations = TypeWithAnnotations.Create(returnType.EnsureCSharpSymbolOrNull(nameof(returnType)), returnType.NullableAnnotation.ToInternalAnnotation());
4094type => TypeWithAnnotations.Create(type.EnsureCSharpSymbolOrNull(nameof(parameterTypes)), type.NullableAnnotation.ToInternalAnnotation()));
4142var typesBuilder = ArrayBuilder<TypeWithAnnotations>.GetInstance(elementTypes.Length);
4148typesBuilder.Add(TypeWithAnnotations.Create(elementType, annotation));
4186(t, a) => TypeWithAnnotations.Create(t.Type, a.ToInternalAnnotation())));
4216fields.Add(new AnonymousTypeField(name, location, TypeWithAnnotations.Create(type, nullableAnnotation), RefKind.None, ScopedKind.None));
FlowAnalysis\NullableWalker.cs (216)
100public readonly TypeWithAnnotations LValueType;
111public VisitResult(TypeWithState rValueType, TypeWithAnnotations lValueType)
120public VisitResult(TypeWithState rValueType, TypeWithAnnotations lValueType, Optional<LocalState> stateForLambda)
129LValueType = TypeWithAnnotations.Create(type, annotation);
137public VisitResult(TypeWithState rValueType, TypeWithAnnotations lValueType, VisitResult[] nestedVisitResults)
143internal VisitResult WithLValueType(TypeWithAnnotations lvalueType)
204private ArrayBuilder<(BoundReturnStatement, TypeWithAnnotations)>? _returnTypesOpt;
242private PooledDictionary<BoundExpression, Func<TypeWithAnnotations, TypeWithState>>? _targetTypedAnalysisCompletionOpt;
247/// The delegate is invoked by <see cref="VisitConversion(BoundConversion, BoundExpression, Conversion, TypeWithAnnotations, TypeWithState, bool, bool, bool, AssignmentKind, ParameterSymbol, bool, bool, bool, bool, Optional<LocalState>,bool, Location, ArrayBuilder<VisitResult>)"/>.
249private PooledDictionary<BoundExpression, Func<TypeWithAnnotations, TypeWithState>> TargetTypedAnalysisCompletion
250=> _targetTypedAnalysisCompletionOpt ??= PooledDictionary<BoundExpression, Func<TypeWithAnnotations, TypeWithState>>.GetInstance();
315private TypeWithAnnotations LvalueResultType
320private void SetLvalueResultType(BoundExpression? expression, TypeWithAnnotations type)
335private void SetResult(BoundExpression? expression, TypeWithState resultType, TypeWithAnnotations lvalueType, bool updateAnalyzedNullability = true, bool? isLvalue = null)
355private void SetAnalyzedNullability(BoundExpression? expression, TypeWithState resultType, TypeWithAnnotations lvalueType, bool? isLvalue = null)
459ArrayBuilder<(BoundReturnStatement, TypeWithAnnotations)>? returnTypesOpt,
721TypeWithAnnotations symbolType;
839var type = memberToInitialize.GetTypeOrReturnType();
1026var symbolType = ApplyUnconditionalAnnotations(property.TypeWithAnnotations, symbolAnnotations);
1033var overriddenType = ApplyUnconditionalAnnotations(overriddenProperty.TypeWithAnnotations, overriddenAnnotations);
1747ArrayBuilder<(BoundReturnStatement, TypeWithAnnotations)>? returnTypesOpt)
1793ArrayBuilder<(BoundReturnStatement, TypeWithAnnotations)>? returnTypesOpt,
1974if (!_variables.TryGetType(local, out TypeWithAnnotations localType))
1983if (!_variables.TryGetType(parameter, out TypeWithAnnotations parameterType))
2282private TypeWithAnnotations VisitLvalueWithAnnotations(BoundExpression node)
2323private static bool ShouldReportNullableAssignment(TypeWithAnnotations type, NullableFlowState state)
2359TypeWithAnnotations targetType,
2432TypeWithAnnotations overriddenType,
2434TypeWithAnnotations overridingType,
2505static bool isBadAssignment(TypeWithState valueState, TypeWithAnnotations destinationType, FlowAnalysisAnnotations destinationAnnotations)
2581TypeWithAnnotations targetType,
2624static bool areEquivalentTypes(TypeWithAnnotations target, TypeWithState assignedValue) =>
2691TypeWithAnnotations fieldOrPropertyType = member.GetTypeOrReturnType();
2873var parameterType = i >= signatureParameters.Length ? parameter.TypeWithAnnotations : signatureParameters[i].TypeWithAnnotations;
2879private void EnterParameter(ParameterSymbol parameter, TypeWithAnnotations parameterType)
2908var parameterLValueType = ApplyLValueAnnotations(parameter.TypeWithAnnotations, parameterAnnotations);
2924internal static TypeWithState GetParameterState(TypeWithAnnotations parameterType, FlowAnalysisAnnotations parameterAnnotations)
2954TryGetReturnType(out TypeWithAnnotations returnType, out FlowAnalysisAnnotations returnAnnotations))
3012private TypeWithState VisitRefExpression(BoundExpression expr, TypeWithAnnotations destinationType)
3018var lvalueResultType = LvalueResultType;
3034private bool TryGetReturnType(out TypeWithAnnotations type, out FlowAnalysisAnnotations annotations)
3045var returnType = delegateOrMethod.ReturnTypeWithAnnotations;
3089var type = GetDeclaredLocalResult(local);
3097type = TypeWithAnnotations.Create(node.Type, type.NullableAnnotation);
3452var resultType = ResultType.ToTypeWithAnnotations(compilation);
3553TypeWithAnnotations type = local.TypeWithAnnotations;
3756var elementConversionCompletions = ArrayBuilder<Func<TypeWithAnnotations, TypeWithState>>.GetInstance();
3811(TypeWithAnnotations resultTypeWithAnnotations) => convertCollection(node, resultTypeWithAnnotations, elementConversionCompletions);
3820var resultType = TypeWithAnnotations.Create(node.Type);
3827TypeWithState convertCollection(BoundCollectionExpression node, TypeWithAnnotations targetCollectionType, ArrayBuilder<Func<TypeWithAnnotations, TypeWithState>> completions)
3869(CollectionExpressionTypeKind, TypeWithAnnotations) getCollectionDetails(BoundCollectionExpression node, TypeSymbol collectionType)
3871var collectionKind = ConversionsBase.GetCollectionExpressionTypeKind(this.compilation, collectionType, out var targetElementType);
3983(TypeWithAnnotations resultTypeWithAnnotations) =>
4062var parameterType = constructor.ParameterTypesWithAnnotations[0];
4063if (AreNullableAndUnderlyingTypes(type, parameterType.Type, out TypeWithAnnotations underlyingType))
4311Action<int, Symbol>? visitMemberAssignment(BoundAssignmentOperator node, int containingSlot, Symbol symbol, bool delayCompletionForType, Func<TypeWithAnnotations, TypeWithState>? conversionCompletion = null)
4322var type = ApplyLValueAnnotations(symbol.GetTypeOrReturnType(), GetObjectInitializerMemberLValueAnnotations(symbol));
4344Action<int, Symbol>? visitMemberAssignmentAsContinuation(BoundAssignmentOperator node, Func<TypeWithAnnotations, TypeWithState> conversionCompletion)
4477var lvalueType = resultType.ToTypeWithAnnotations(compilation);
4529return GetOrCreatePlaceholderSlot(node, TypeWithAnnotations.Create(node.Type, NullableAnnotation.NotAnnotated));
4532private int GetOrCreatePlaceholderSlot(object identifier, TypeWithAnnotations type)
4682TypeWithAnnotations inferredType = (bestType is null)
4684: TypeWithAnnotations.Create(bestType);
4723static TypeWithAnnotations getSpanElementType(NamedTypeSymbol namedType)
4730static TypeSymbol setSpanElementType(NamedTypeSymbol namedType, TypeWithAnnotations elementType)
4759internal static TypeWithAnnotations BestTypeForLambdaReturns(
4760ArrayBuilder<(BoundExpression expr, TypeWithAnnotations resultType, bool isChecked)> returns,
4782var resultTypes = ArrayBuilder<TypeWithAnnotations>.GetInstance(n);
4795TypeWithAnnotations inferredType;
4799var bestTypeWithObliviousAnnotation = TypeWithAnnotations.Create(bestType);
4811inferredType = TypeWithAnnotations.Create(bestType, BestTypeInferrer.GetNullableAnnotation(resultTypes));
4858TypeWithAnnotations result;
4862result = TypeWithAnnotations.Create(type);
4885TypeWithAnnotations type = expressionType.TryGetInlineArrayElementField()!.TypeWithAnnotations;
4889type = TypeWithAnnotations.Create(((NamedTypeSymbol)node.Type).OriginalDefinition.Construct(ImmutableArray.Create(type)));
5114SetResult(binary, TypeWithState.ForType(binary.Type), TypeWithAnnotations.Create(binary.Type));
5176var targetTypeWithNullability = ApplyLValueAnnotations(parameter.TypeWithAnnotations, parameterAnnotations);
5180targetTypeWithNullability = TypeWithAnnotations.Create(MakeNullableOf(targetTypeWithNullability));
5225TypeWithAnnotations.Create(expr.Type),
5611TypeWithAnnotations targetType = VisitLvalueWithAnnotations(leftOperand);
5629targetType = TypeWithAnnotations.Create(node.Type, NullableAnnotation.NotAnnotated);
5720TypeWithAnnotations.Create(rightType),
5756TypeWithAnnotations explicitType = boundConversion.ConversionGroupOpt?.ExplicitType ?? default;
5758TypeWithAnnotations targetType = fromExplicitCast ? explicitType : TypeWithAnnotations.Create(boundConversion.Type);
5896var accessTypeWithAnnotations = LvalueResultType;
5952TypeWithAnnotations consequenceLValue;
5953TypeWithAnnotations alternativeLValue;
5973var refResultTypeWithAnnotations = TypeWithAnnotations.Create(refResultType, lValueAnnotation);
5982SetResult(node, TypeWithState.Create(refResultType, rValueState), TypeWithAnnotations.Create(refResultType, lValueAnnotation));
6033TypeWithAnnotations resultTypeWithAnnotations;
6054resultTypeWithAnnotations = TypeWithAnnotations.Create(resultType);
6067BoundExpression alternative, Conversion alternativeConversion, bool alternativeEndReachable, TypeWithAnnotations resultTypeWithAnnotations, bool wasTargetTyped)
6124(TypeWithAnnotations resultTypeWithAnnotations) =>
6146(TypeWithAnnotations LValueType, TypeWithState RValueType) visitConditionalRefOperand(LocalState state, BoundExpression operand)
6150TypeWithAnnotations lValueType = VisitLvalueWithAnnotations(operand);
6154void reportMismatchIfNecessary(BoundExpression node, TypeWithAnnotations source, TypeWithAnnotations destination)
6167TypeWithAnnotations targetType,
6215private static BoundExpression CreatePlaceholderIfNecessary(BoundExpression expr, TypeWithAnnotations type)
6282TypeWithAnnotations paramsIterationType = default;
6426var parameterType = method.Parameters[0].TypeWithAnnotations;
6686private static TypeWithAnnotations ApplyLValueAnnotations(TypeWithAnnotations declaredType, FlowAnalysisAnnotations flowAnalysisAnnotations)
6718private static TypeWithAnnotations ApplyUnconditionalAnnotations(TypeWithAnnotations declaredType, FlowAnalysisAnnotations annotations)
6914TypeWithAnnotations paramsIterationType = default;
6921(ParameterSymbol? parameter, TypeWithAnnotations parameterType, FlowAnalysisAnnotations parameterAnnotations, bool isExpandedParamsArgument) =
6987TypeWithAnnotations paramsIterationType = default;
6993(ParameterSymbol? parameter, TypeWithAnnotations parameterType, FlowAnalysisAnnotations parameterAnnotations, _) =
7138completion(TypeWithAnnotations.Create(argument.Type));
7320TypeWithAnnotations paramsIterationType = default;
7330TypeWithAnnotations paramsIterationType = default;
7409TypeWithAnnotations parameterType,
7464var lvalueResultType = result.LValueType;
7546TypeWithAnnotations parameterType,
7576var lValueType = result.LValueType;
7600var declaredType = result.LValueType;
7602var lValueType = ApplyLValueAnnotations(declaredType, leftAnnotations);
7605var varType = worstCaseParameterWithState.ToAnnotatedTypeWithAnnotations(compilation);
7659void trackNullableStateForAssignment(BoundExpression parameterValue, TypeWithAnnotations lValueType, int targetSlot, TypeWithState parameterWithState, bool isSuppressed, FlowAnalysisAnnotations parameterAnnotations)
7842private (ParameterSymbol? Parameter, TypeWithAnnotations Type, FlowAnalysisAnnotations Annotations, bool isExpandedParamsArgument) GetCorrespondingParameter(
7847ref TypeWithAnnotations paramsIterationType)
7861var type = parameter.TypeWithAnnotations;
7908parameterTypes: out ImmutableArray<TypeWithAnnotations> parameterTypes,
7941internal override TypeWithAnnotations GetTypeWithAnnotations(BoundExpression expr)
7943return TypeWithAnnotations.Create(expr.GetTypeOrFunctionType(), GetNullableAnnotation(expr));
7974internal override TypeWithAnnotations GetMethodGroupResultType(BoundMethodGroup group, MethodSymbol method)
8042var argumentType = visitResult.RValueType.ToTypeWithAnnotations(compilation);
8328TypeWithAnnotations explicitType = node.ConversionGroupOpt?.ExplicitType ?? default;
8330TypeWithAnnotations targetType = fromExplicitCast ? explicitType : TypeWithAnnotations.Create(node.Type);
8368private TypeWithState VisitOptionalImplicitConversion(BoundExpression expr, TypeWithAnnotations targetTypeOpt, bool useLegacyWarnings, bool trackMembers, AssignmentKind assignmentKind)
8380private (TypeWithState resultType, Func<TypeWithAnnotations, TypeWithState>? completion) VisitOptionalImplicitConversion(
8382TypeWithAnnotations targetTypeOpt,
8394(TypeWithState resultType, Func<TypeWithAnnotations, TypeWithState>? completion) visitConversion(
8396TypeWithAnnotations targetTypeOpt,
8431Func<TypeWithAnnotations, TypeWithState> visitConversionAsContinuation(BoundExpression expr, bool useLegacyWarnings, bool trackMembers, AssignmentKind assignmentKind, BoundExpression operand, Conversion conversion, TypeWithState operandType)
8433return (TypeWithAnnotations targetTypeOpt) =>
8442private static bool AreNullableAndUnderlyingTypes([NotNullWhen(true)] TypeSymbol? nullableTypeOpt, [NotNullWhen(true)] TypeSymbol? underlyingTypeOpt, out TypeWithAnnotations underlyingTypeWithAnnotations)
8447var typeArg = nullableTypeOpt.GetNullableUnderlyingTypeWithAnnotations();
8482ImmutableArray<TypeWithAnnotations> elementTypesWithAnnotations = elementTypes.SelectAsArray(a => a.ToTypeWithAnnotations(compilation));
8839TypeWithAnnotations targetTypeWithNullability,
8860if (TargetTypedAnalysisCompletion.TryGetValue(conversionOperand, out Func<TypeWithAnnotations, TypeWithState>? completion))
9051if (AreNullableAndUnderlyingTypes(targetType, operandType.Type, out TypeWithAnnotations underlyingType))
9191static TypeWithState calculateResultType(TypeWithAnnotations targetTypeWithNullability, bool fromExplicitCast, NullableFlowState resultState, bool isSuppressed, TypeSymbol targetType)
9207static NullableFlowState getReferenceConversionResultState(TypeWithAnnotations targetType, TypeWithState operandType)
9241static NullableFlowState getBoxingConversionResultState(TypeWithAnnotations targetType, TypeWithState operandType)
9301foreach (var constraintType in typeParameter1.ConstraintTypesNoUseSiteDiagnostics)
9391TypeWithAnnotations targetTypeWithNullability,
9423TypeWithAnnotations.Create(conversion.BestUserDefinedConversionAnalysis!.FromType),
9443var parameterType = ApplyLValueAnnotations(parameter.TypeWithAnnotations, parameterAnnotations);
9449var underlyingOperandTypeWithAnnotations = operandType.Type.GetNullableUnderlyingTypeWithAnnotations();
9475var methodReturnType = method.ReturnTypeWithAnnotations;
9494TypeWithAnnotations.Create(conversion.BestUserDefinedConversionAnalysis!.ToType),
9575private TypeWithState GetLiftedReturnType(TypeWithAnnotations returnType, NullableFlowState operandState)
9596private TypeWithState GetLiftedReturnTypeIfNecessary(bool isLifted, TypeWithAnnotations returnType, NullableFlowState operandState)
9603private TypeSymbol MakeNullableOf(TypeWithAnnotations underlying)
9610TypeWithAnnotations targetType,
9710(TypeWithAnnotations resultTypeWithAnnotations) =>
9791var argTypeWithAnnotations = TypeWithAnnotations.Create(argType, NullableAnnotation.NotAnnotated);
9888var parameterType = parameter.TypeWithAnnotations;
9978var lvalueResult = TypeWithAnnotations.Create(node.Type, NullableAnnotation.NotAnnotated);
9986var parameterType = GetDeclaredParameterResult(parameter);
10003TypeWithAnnotations declaredType = LvalueResultType;
10004TypeWithAnnotations leftLValueType = ApplyLValueAnnotations(declaredType, leftAnnotations);
10033var lvalueType = rightState.ToTypeWithAnnotations(compilation);
10051var type = property.TypeWithAnnotations;
10053var lValueType = ApplyLValueAnnotations(type, annotations);
10375AreNullableAndUnderlyingTypes(lvalueType.Type, operandType.Type, out TypeWithAnnotations underlyingType))
10391internal readonly TypeWithAnnotations Type;
10394internal DeconstructionVariable(BoundExpression expression, TypeWithAnnotations type)
10478var operandLvalue = LvalueResultType;
10485TypeWithAnnotations targetTypeOfOperandConversion;
10541var operandTypeWithAnnotations = operandType.ToTypeWithAnnotations(compilation);
10583var leftLvalueType = LvalueResultType;
10661var paramType = parameter.TypeWithAnnotations;
10696private TypeWithAnnotations GetDeclaredLocalResult(LocalSymbol local)
10698return _variables.TryGetType(local, out TypeWithAnnotations type) ?
10703private TypeWithAnnotations GetDeclaredParameterResult(ParameterSymbol parameter)
10705return _variables.TryGetType(parameter, out TypeWithAnnotations type) ?
10833var type = member.GetTypeOrReturnType();
10954TypeWithAnnotations targetTypeWithAnnotations;
10990targetTypeWithAnnotations = TypeWithAnnotations.Create(collectionExpression.Type);
10997targetTypeWithAnnotations = TypeWithAnnotations.Create(ForEachLoopBinder.GetIEnumerableOfT(resultType, isAsync, compilation, ref discardedUseSiteInfo, out bool foundMultiple, needSupportForRefStructInterfaces: out _));
11048TypeWithAnnotations.Create(enumeratorInfoOpt.ElementType, NullableAnnotation.NotAnnotated).ToTypeWithState();
11129TypeWithAnnotations sourceType = sourceState.ToTypeWithAnnotations(compilation);
11158TypeWithAnnotations destinationType = iterationVariable.TypeWithAnnotations;
11256var type = TypeWithAnnotations.Create(node.Type);
11357var type = TypeWithAnnotations.Create(node.Type);
11365var type = TypeWithAnnotations.Create(node.Type);
11387var type = TypeWithAnnotations.Create(node.Type, node.NullableAnnotation);
11715var result = TypeWithAnnotations.Create(node.Type);
11735var result = TypeWithAnnotations.Create(node.Type, NullableAnnotation.Oblivious);
11841var result = TypeWithAnnotations.Create(node.Type, NullableAnnotation.Oblivious);
11910private static bool IsNullabilityMismatch(TypeWithAnnotations type1, TypeWithAnnotations type2)
12012var result = TypeWithAnnotations.Create(node.Type, node.IsInferred ? NullableAnnotation.Annotated : node.NullableAnnotation);
12056TypeWithAnnotations elementType = InMethodBinder.GetIteratorElementTypeFromReturnType(compilation, RefKind.None,
12109var typeWithAnnotations = TypeWithAnnotations.Create(node.Type, node.NullableAnnotation);
12174var returnTypeWithAnnotations = node.FunctionPointer.Signature.ReturnTypeWithAnnotations;
FlowAnalysis\NullableWalker.Variables.cs (7)
48internal readonly ImmutableDictionary<Symbol, TypeWithAnnotations> VariableTypes;
50internal VariablesSnapshot(int id, VariablesSnapshot? container, Symbol? symbol, ImmutableArray<KeyValuePair<VariableIdentifier, int>> variableSlot, ImmutableDictionary<Symbol, TypeWithAnnotations> variableTypes)
59internal bool TryGetType(Symbol symbol, out TypeWithAnnotations type)
128private readonly PooledDictionary<Symbol, TypeWithAnnotations> _variableTypes = SpecializedSymbolCollections.GetPooledSymbolDictionaryInstance<Symbol, TypeWithAnnotations>();
297internal bool TryGetType(Symbol symbol, out TypeWithAnnotations type)
303internal void SetType(Symbol symbol, TypeWithAnnotations type)
FlowAnalysis\NullableWalker_Patterns.cs (19)
387var expressionTypeWithAnnotations = expressionTypeWithState.ToTypeWithAnnotations(compilation);
451var parameterType = method.Parameters[i + extensionExtra].TypeWithAnnotations;
476outputSlot = makeDagTempSlot(TypeWithAnnotations.Create(e.Type, NullableAnnotation.NotAnnotated), output);
489var type = field.TypeWithAnnotations;
535var type = property.TypeWithAnnotations;
560TypeWithAnnotations type = getIndexerOutputType(inputType, e.IndexerAccess, isSlice: false);
572TypeWithAnnotations type = getIndexerOutputType(inputType, e.IndexerAccess, isSlice: true);
684var inferredType = value.ToTypeWithAnnotations(compilation, asAnnotatedType: boundLocal.DeclarationKind == BoundLocalDeclarationKind.WithInferredType);
685if (_variables.TryGetType(local, out var existingType))
688inferredType = TypeWithAnnotations.Create(inferredType.Type, existingType.NullableAnnotation.Join(inferredType.NullableAnnotation));
831int makeDagTempSlot(TypeWithAnnotations type, BoundDagTemp temp)
839var type = TypeWithAnnotations.Create(t, NullableAnnotation.Annotated);
846static TypeWithAnnotations getIndexerOutputType(TypeSymbol inputType, BoundExpression e, bool isSlice)
854? TypeWithAnnotations.Create(isNullableEnabled: true, inputType, isAnnotated: false)
955var inferredTypeWithAnnotations = TypeWithAnnotations.Create(inferredType);
991TypeWithAnnotations inferredTypeWithAnnotations,
1038(TypeWithAnnotations inferredTypeWithAnnotations) =>
Generated\BoundNodes.xml.Generated.cs (9)
1069public BoundTypeExpression(SyntaxNode syntax, AliasSymbol? aliasOpt, BoundTypeExpression? boundContainingTypeOpt, ImmutableArray<BoundExpression> boundDimensionsOpt, TypeWithAnnotations typeWithAnnotations, TypeSymbol type, bool hasErrors = false)
1085public TypeWithAnnotations TypeWithAnnotations { get; }
1090public BoundTypeExpression Update(AliasSymbol? aliasOpt, BoundTypeExpression? boundContainingTypeOpt, ImmutableArray<BoundExpression> boundDimensionsOpt, TypeWithAnnotations typeWithAnnotations, TypeSymbol type)
5838public BoundDynamicMemberAccess(SyntaxNode syntax, BoundExpression receiver, ImmutableArray<TypeWithAnnotations> typeArgumentsOpt, string name, bool invoked, bool indexed, TypeSymbol type, bool hasErrors = false)
5855public ImmutableArray<TypeWithAnnotations> TypeArgumentsOpt { get; }
5863public BoundDynamicMemberAccess Update(BoundExpression receiver, ImmutableArray<TypeWithAnnotations> typeArgumentsOpt, string name, bool invoked, bool indexed, TypeSymbol type)
6075public BoundMethodGroup(SyntaxNode syntax, ImmutableArray<TypeWithAnnotations> typeArgumentsOpt, string name, ImmutableArray<MethodSymbol> methods, Symbol? lookupSymbolOpt, DiagnosticInfo? lookupError, BoundMethodGroupFlags? flags, FunctionTypeSymbol? functionType, BoundExpression? receiverOpt, LookupResultKind resultKind, bool hasErrors = false)
6091public ImmutableArray<TypeWithAnnotations> TypeArgumentsOpt { get; }
6102public BoundMethodGroup Update(ImmutableArray<TypeWithAnnotations> typeArgumentsOpt, string name, ImmutableArray<MethodSymbol> methods, Symbol? lookupSymbolOpt, DiagnosticInfo? lookupError, BoundMethodGroupFlags? flags, FunctionTypeSymbol? functionType, BoundExpression? receiverOpt, LookupResultKind resultKind)
Lowering\AsyncRewriter\AsyncExceptionHandlerRewriter.cs (5)
187var pendingExceptionLocal = new SynthesizedLocal(_F.CurrentFunction, TypeWithAnnotations.Create(exceptionType), SynthesizedLocalKind.TryAwaitPendingException, tryStatementSyntax);
189var pendingBranchVar = new SynthesizedLocal(_F.CurrentFunction, TypeWithAnnotations.Create(_F.SpecialType(SpecialType.System_Int32)), SynthesizedLocalKind.TryAwaitPendingBranch, tryStatementSyntax);
1008this.returnValue = returnValue = new SynthesizedLocal(containingMethod, TypeWithAnnotations.Create(valueOpt.Type), SynthesizedLocalKind.AsyncMethodReturnValue, _syntaxOpt);
1044this.pendingCaughtException = new SynthesizedLocal(F.CurrentFunction, TypeWithAnnotations.Create(F.SpecialType(SpecialType.System_Object)), SynthesizedLocalKind.TryAwaitPendingCaughtException, tryStatementSyntax);
1045this.pendingCatch = new SynthesizedLocal(F.CurrentFunction, TypeWithAnnotations.Create(F.SpecialType(SpecialType.System_Int32)), SynthesizedLocalKind.TryAwaitPendingCatch, tryStatementSyntax);
Lowering\ClosureConversion\ClosureConversion.cs (11)
662var frameTypeParameters = ImmutableArray.Create(_currentTypeParameters.SelectAsArray(t => TypeWithAnnotations.Create(t)), 0, frame.Arity);
666LocalSymbol framePointer = new SynthesizedLocal(_topLevelMethod, TypeWithAnnotations.Create(frameType), SynthesizedLocalKind.LambdaDisplayClass, frame.ScopeSyntaxOpt);
960private ImmutableArray<TypeWithAnnotations> SubstituteTypeArguments(ImmutableArray<TypeWithAnnotations> typeArguments)
984var builder = ArrayBuilder<TypeWithAnnotations>.GetInstance(typeArguments.Length);
985foreach (var typeArg in typeArguments)
987TypeWithAnnotations oldTypeArg;
988TypeWithAnnotations newTypeArg = typeArg;
1013ImmutableArray<TypeWithAnnotations> typeArgumentsOpt,
1025var realTypeArguments = ImmutableArray.Create(_currentTypeParameters.SelectAsArray(t => TypeWithAnnotations.Create(t)), 0, totalTypeArgumentCount - originalMethod.Arity);
1651RemapLambdaOrLocalFunction(node.Syntax, node.Symbol, default(ImmutableArray<TypeWithAnnotations>), closureKind, ref referencedMethod, out receiver, out constructedFrame);
Lowering\LocalRewriter\LocalRewriter_CollectionExpression.cs (12)
46if (ConversionsBase.IsSpanOrListType(_compilation, node.Type, WellKnownType.System_Collections_Generic_List_T, out var listElementType))
63return VisitArrayOrSpanCollectionExpression(node, collectionTypeKind, node.Type, TypeWithAnnotations.Create(elementType));
66if (ConversionsBase.IsSpanOrListType(_compilation, node.Type, WellKnownType.System_Collections_Immutable_ImmutableArray_T, out var arrayElementType))
160private bool TryRewriteSingleElementSpreadToList(BoundCollectionExpression node, TypeWithAnnotations listElementType, [NotNullWhen(true)] out BoundExpression? result)
235private BoundExpression VisitImmutableArrayCollectionExpression(BoundCollectionExpression node, TypeWithAnnotations elementType, MethodSymbol asImmutableArray)
246private BoundExpression VisitArrayOrSpanCollectionExpression(BoundCollectionExpression node, CollectionExpressionTypeKind collectionTypeKind, TypeSymbol collectionType, TypeWithAnnotations elementType)
405var elementType = collectionType.TypeArgumentsWithAnnotationsNoUseSiteDiagnostics.Single();
483var elementType = spanType.TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0];
542TypeWithAnnotations elementType,
576Construct(ImmutableArray.Create(TypeWithAnnotations.Create(inlineArrayType), elementType));
605inlineArrayAsSpan = inlineArrayAsSpan.Construct(ImmutableArray.Create(TypeWithAnnotations.Create(inlineArrayType), elementType));
1021private BoundExpression CreateAndPopulateList(BoundCollectionExpression node, TypeWithAnnotations elementType, ImmutableArray<BoundNode> elements)
Lowering\StateMachineRewriter\StateMachineFieldSymbol.cs (5)
21private readonly TypeWithAnnotations _type;
30public StateMachineFieldSymbol(NamedTypeSymbol stateMachineType, TypeWithAnnotations type, string name, bool isPublic, bool isThis)
42this(stateMachineType, TypeWithAnnotations.Create(type), name, slotDebugInfo, slotIndex, isPublic)
46public StateMachineFieldSymbol(NamedTypeSymbol stateMachineType, TypeWithAnnotations type, string name, LocalSlotDebugInfo slotDebugInfo, int slotIndex, bool isPublic)
66internal override TypeWithAnnotations GetFieldType(ConsList<FieldSymbol> fieldsBeingBound)
Lowering\SyntheticBoundNodeFactory.cs (10)
170public StateMachineFieldSymbol StateMachineField(TypeWithAnnotations type, string name, bool isPublic = false, bool isThis = false)
181var result = new StateMachineFieldSymbol(CurrentType, TypeWithAnnotations.Create(type), name, isPublic, isThis);
595return new SynthesizedLocal(CurrentFunction, TypeWithAnnotations.Create(type), kind, syntax, isPinned,
615TypeWithAnnotations.Create(type),
626return SynthesizedParameterSymbol.Create(container, TypeWithAnnotations.Create(type), ordinal, RefKind.None, name);
1223public BoundExpression NullRef(TypeWithAnnotations type)
1274public BoundExpression Typeof(TypeWithAnnotations type, TypeSymbol systemType)
1279public ImmutableArray<BoundExpression> TypeOfs(ImmutableArray<TypeWithAnnotations> typeArguments, TypeSymbol systemType)
1682TypeWithAnnotations.Create(type),
1721temp = new SynthesizedLocal(this.CurrentFunction, TypeWithAnnotations.Create(node.Type), SynthesizedLocalKind.LoweringTemp);
Symbols\ArrayTypeSymbol.cs (24)
22private readonly TypeWithAnnotations _elementTypeWithAnnotations;
26TypeWithAnnotations elementTypeWithAnnotations,
38TypeWithAnnotations elementTypeWithAnnotations,
50TypeWithAnnotations elementTypeWithAnnotations,
67TypeWithAnnotations elementType,
76TypeWithAnnotations elementTypeWithAnnotations,
83TypeWithAnnotations elementTypeWithAnnotations,
92TypeWithAnnotations elementType)
97internal ArrayTypeSymbol WithElementType(TypeWithAnnotations elementTypeWithAnnotations)
102protected abstract ArrayTypeSymbol WithElementTypeCore(TypeWithAnnotations elementTypeWithAnnotations);
105TypeWithAnnotations elementTypeWithAnnotations,
201public TypeWithAnnotations ElementTypeWithAnnotations
393TypeWithAnnotations oldElementType = ElementTypeWithAnnotations;
394TypeWithAnnotations newElementType;
406internal override TypeSymbol SetNullabilityForReferenceTypes(Func<TypeWithAnnotations, TypeWithAnnotations> transform)
414TypeWithAnnotations elementType = ElementTypeWithAnnotations.MergeEquivalentTypes(((ArrayTypeSymbol)other).ElementTypeWithAnnotations, variance);
512TypeWithAnnotations elementTypeWithAnnotations,
521protected override ArrayTypeSymbol WithElementTypeCore(TypeWithAnnotations newElementType)
570TypeWithAnnotations elementTypeWithAnnotations,
604TypeWithAnnotations elementTypeWithAnnotations,
611protected override ArrayTypeSymbol WithElementTypeCore(TypeWithAnnotations elementTypeWithAnnotations)
631TypeWithAnnotations elementTypeWithAnnotations,
644protected override ArrayTypeSymbol WithElementTypeCore(TypeWithAnnotations elementTypeWithAnnotations)
Symbols\ConstraintsHelper.cs (31)
75ImmutableArray<TypeWithAnnotations> constraintTypes,
132ImmutableArray<TypeWithAnnotations> constraintTypes,
152var constraintTypesBuilder = ArrayBuilder<TypeWithAnnotations>.GetInstance();
159foreach (var constraintType in constraintTypes)
344internal static ImmutableArray<ImmutableArray<TypeWithAnnotations>> MakeTypeParameterConstraintTypes(
354return ImmutableArray<ImmutableArray<TypeWithAnnotations>>.Empty;
368return ImmutableArray<ImmutableArray<TypeWithAnnotations>>.Empty;
893ImmutableArray<TypeWithAnnotations> typeArguments,
930TypeWithAnnotations typeArgument,
1033TypeWithAnnotations typeArgument,
1059var constraintTypes = ArrayBuilder<TypeWithAnnotations>.GetInstance();
1061ImmutableArray<TypeWithAnnotations> originalConstraintTypes = typeParameter.ConstraintTypesWithDefinitionUseSiteDiagnostics(ref useSiteInfo);
1093static bool errorIfNotSatisfiesConstructorConstraint(Symbol containingSymbol, TypeParameterSymbol typeParameter, TypeWithAnnotations typeArgument, ArrayBuilder<TypeParameterDiagnosticInfo> diagnosticsBuilder)
1119TypeWithAnnotations typeArgument,
1143TypeWithAnnotations typeArgument,
1147TypeWithAnnotations constraintType,
1199static NullableFlowState getTypeArgumentState(in TypeWithAnnotations typeWithAnnotations)
1223foreach (var constraintType in typeParameter.ConstraintTypesNoUseSiteDiagnostics)
1238static bool constraintTypeAllows(in TypeWithAnnotations typeWithAnnotations, NullableFlowState state)
1260foreach (var constraintType in typeParameter.ConstraintTypesNoUseSiteDiagnostics)
1319TypeWithAnnotations typeArgument,
1320TypeWithAnnotations constraintType,
1369foreach (var typeArgumentConstraint in typeParameter.ConstraintTypesWithDefinitionUseSiteDiagnostics(ref useSiteInfo))
1412private static bool IsReferenceType(TypeParameterSymbol typeParameter, ImmutableArray<TypeWithAnnotations> constraintTypes)
1417private static bool IsValueType(TypeParameterSymbol typeParameter, ImmutableArray<TypeWithAnnotations> constraintTypes)
1605internal static TypeWithAnnotations ConstraintWithMostSignificantNullability(TypeWithAnnotations type1, TypeWithAnnotations type2)
1625internal static bool IsObjectConstraint(TypeWithAnnotations type, ref TypeWithAnnotations bestObjectConstraint)
1651internal static bool IsObjectConstraintSignificant(bool? isNotNullable, TypeWithAnnotations objectConstraint)
Symbols\FunctionPointers\FunctionPointerMethodSymbol.cs (35)
29TypeWithAnnotations returnType;
33returnType = TypeWithAnnotations.Create(typeBinder.CreateErrorType());
245TypeWithAnnotations returnType,
248ImmutableArray<TypeWithAnnotations> parameterTypes,
270TypeWithAnnotations returnTypeWithAnnotations,
272ImmutableArray<TypeWithAnnotations> parameterTypes,
334TypeWithAnnotations substitutedReturnType,
335ImmutableArray<TypeWithAnnotations> substitutedParameterTypes,
352var mergedReturnType = ReturnTypeWithAnnotations.MergeEquivalentTypes(signature.ReturnTypeWithAnnotations, returnVariance);
354var mergedParameterTypes = ImmutableArray<TypeWithAnnotations>.Empty;
358var paramMergedTypesBuilder = ArrayBuilder<TypeWithAnnotations>.GetInstance(_parameters.Length);
371var mergedParameterType = thisParam.TypeWithAnnotations.MergeEquivalentTypes(otherParam.TypeWithAnnotations, paramVariance);
400public FunctionPointerMethodSymbol SetNullabilityForReferenceTypes(Func<TypeWithAnnotations, TypeWithAnnotations> transform)
402var transformedReturn = transform(ReturnTypeWithAnnotations);
404var transformedParameterTypes = ImmutableArray<TypeWithAnnotations>.Empty;
408var paramTypesBuilder = ArrayBuilder<TypeWithAnnotations>.GetInstance(_parameters.Length);
411var transformedType = transform(param.TypeWithAnnotations);
444TypeWithAnnotations returnType,
447ImmutableArray<TypeWithAnnotations> substitutedParameterTypes,
465var substitutedType = substitutedParameterTypes[i];
489TypeWithAnnotations returnTypeWithAnnotations,
491ImmutableArray<TypeWithAnnotations> parameterTypes,
520TypeWithAnnotations returnType,
548var returnType = TypeWithAnnotations.Create(retInfo.Type, customModifiers: CSharpCustomModifier.Convert(retInfo.CustomModifiers));
568var paramType = TypeWithAnnotations.Create(param.Type, customModifiers: CSharpCustomModifier.Convert(param.CustomModifiers));
605bool madeChanges = ReturnTypeWithAnnotations.ApplyNullableTransforms(defaultTransformFlag, transforms, ref position, out var newReturnType);
606var newParamTypes = ImmutableArray<TypeWithAnnotations>.Empty;
609var paramTypesBuilder = ArrayBuilder<TypeWithAnnotations>.GetInstance(Parameters.Length);
613madeParamChanges |= param.TypeWithAnnotations.ApplyNullableTransforms(defaultTransformFlag, transforms, ref position, out var newParamType);
768public override TypeWithAnnotations ReturnTypeWithAnnotations { get; }
836public override ImmutableArray<TypeWithAnnotations> TypeArgumentsWithAnnotations => ImmutableArray<TypeWithAnnotations>.Empty;
Symbols\Metadata\PE\PETypeParameterSymbol.cs (19)
44private ImmutableArray<TypeWithAnnotations> _lazyDeclaredConstraintTypes;
151private ImmutableArray<TypeWithAnnotations> GetDeclaredConstraintTypes(ConsList<PETypeParameterSymbol> inProgress)
158ImmutableArray<TypeWithAnnotations> declaredConstraintTypes;
168var symbolsBuilder = ArrayBuilder<TypeWithAnnotations>.GetInstance();
171TypeWithAnnotations bestObjectConstraint = default;
176TypeWithAnnotations type = GetConstraintTypeOrDefault(moduleSymbol, metadataReader, tokenDecoder, constraintHandle, ref hasUnmanagedModreqPattern);
209foreach (TypeWithAnnotations constraintType in symbolsBuilder)
230declaredConstraintTypes = ImmutableArray<TypeWithAnnotations>.Empty;
265private TypeWithAnnotations GetConstraintTypeOrDefault(PEModuleSymbol moduleSymbol, MetadataReader metadataReader, MetadataDecoder tokenDecoder, GenericParameterConstraintHandle constraintHandle, ref bool hasUnmanagedModreqPattern)
303var type = TypeWithAnnotations.Create(typeSymbol);
309private static bool? IsNotNullableFromConstraintType(TypeWithAnnotations constraintType, ConsList<PETypeParameterSymbol> inProgress, out bool isNonNullableValueType)
354ImmutableArray<TypeWithAnnotations> constraintTypes = this.GetDeclaredConstraintTypes(inProgress);
380private static bool? IsNotNullableFromConstraintTypes(ImmutableArray<TypeWithAnnotations> constraintTypes, ConsList<PETypeParameterSymbol> inProgress, out bool isNonNullableValueType)
386foreach (TypeWithAnnotations constraintType in constraintTypes)
537var symbolsBuilder = ArrayBuilder<TypeWithAnnotations>.GetInstance();
544TypeWithAnnotations type = GetConstraintTypeOrDefault(moduleSymbol, metadataReader, tokenDecoder, constraintHandle, ref hasUnmanagedModreqPattern);
616internal override ImmutableArray<TypeWithAnnotations> GetConstraintTypes(ConsList<TypeParameterSymbol> inProgress)
619return (bounds != null) ? bounds.ConstraintTypes : ImmutableArray<TypeWithAnnotations>.Empty;
Symbols\Source\LocalFunctionOrSourceMemberMethodSymbol.cs (8)
12private TypeWithAnnotations.Boxed? _lazyIteratorElementType;
19_lazyIteratorElementType = TypeWithAnnotations.Boxed.Sentinel;
23internal sealed override TypeWithAnnotations IteratorElementTypeWithAnnotations
27if (_lazyIteratorElementType == TypeWithAnnotations.Boxed.Sentinel)
29TypeWithAnnotations elementType = InMethodBinder.GetIteratorElementTypeFromReturnType(DeclaringCompilation, RefKind, ReturnType, errorLocation: null, diagnostics: null);
33elementType = TypeWithAnnotations.Create(new ExtendedErrorTypeSymbol(DeclaringCompilation, name: "", arity: 0, errorInfo: null, unreported: false));
36Interlocked.CompareExchange(ref _lazyIteratorElementType, new TypeWithAnnotations.Boxed(elementType), TypeWithAnnotations.Boxed.Sentinel);
Symbols\Source\ParameterHelpers.cs (5)
41parameterCreationFunc: (Binder context, Symbol owner, TypeWithAnnotations parameterType,
81parameterCreationFunc: (Binder binder, FunctionPointerMethodSymbol owner, TypeWithAnnotations parameterType,
124Func<Binder, TOwningSymbol, TypeWithAnnotations, TParameterSyntax, RefKind, int, SyntaxToken, SyntaxToken, bool, ScopedKind, BindingDiagnosticBag, TParameterSymbol> parameterCreationFunc,
181var parameterType = withTypeParametersBinder.BindType(parameterSyntax.Type, diagnostics, suppressUseSiteDiagnostics: suppressUseSiteDiagnostics);
652TypeWithAnnotations typeWithAnnotations,
Symbols\Source\SourceDelegateMethodSymbol.cs (24)
20private readonly TypeWithAnnotations _returnType;
24TypeWithAnnotations returnType,
56var returnType = binder.BindType(returnTypeSyntax, diagnostics);
59var voidType = TypeWithAnnotations.Create(binder.GetSpecialType(SpecialType.System_Void, diagnostics, syntax));
61var objectType = TypeWithAnnotations.Create(binder.GetSpecialType(SpecialType.System_Object, diagnostics, syntax));
62var intPtrType = TypeWithAnnotations.Create(binder.GetSpecialType(SpecialType.System_IntPtr, diagnostics, syntax));
84var iAsyncResultType = TypeWithAnnotations.Create(binder.GetSpecialType(SpecialType.System_IAsyncResult, diagnostics, syntax));
85var asyncCallbackType = TypeWithAnnotations.Create(binder.GetSpecialType(SpecialType.System_AsyncCallback, diagnostics, syntax));
152public override ImmutableArray<ImmutableArray<TypeWithAnnotations>> GetTypeParameterConstraintTypes()
153=> ImmutableArray<ImmutableArray<TypeWithAnnotations>>.Empty;
158public sealed override TypeWithAnnotations ReturnTypeWithAnnotations
213TypeWithAnnotations voidType,
214TypeWithAnnotations objectType,
215TypeWithAnnotations intPtrType,
258TypeWithAnnotations returnType,
351TypeWithAnnotations iAsyncResultType,
352TypeWithAnnotations objectType,
353TypeWithAnnotations asyncCallbackType,
391TypeWithAnnotations iAsyncResultType,
Symbols\Source\SourceMemberContainerSymbol.cs (13)
4313TypeWithAnnotations.Create(compilation.GetSpecialType(SpecialType.System_Void)),
4352TypeWithAnnotations.Create(this),
4361TypeWithAnnotations.Create(compilation.GetSpecialType(SpecialType.System_Void)),
4401TypeWithAnnotations.Create(compilation.GetWellKnownType(WellKnownType.System_Text_StringBuilder)),
4409returnType: TypeWithAnnotations.Create(compilation.GetSpecialType(SpecialType.System_Boolean)),
4464returnType: TypeWithAnnotations.Create(compilation.GetSpecialType(SpecialType.System_String)),
4638TypeWithAnnotations.Create(compilation.GetSpecialType(SpecialType.System_Int32)),
4667TypeWithAnnotations.Create(compilation.GetWellKnownType(WellKnownType.System_Type)),
4728TypeWithAnnotations.Create(this),
4737TypeWithAnnotations.Create(compilation.GetSpecialType(SpecialType.System_Boolean)),
5300builder.AddValue(TypeWithAnnotations.Create(baseType));
5304builder.AddValue(TypeWithAnnotations.Create(@interface));
5364AddSynthesizedAttribute(ref attributes, moduleBuilder.SynthesizeNullableAttributeIfNecessary(this, nullableContextValue, TypeWithAnnotations.Create(baseType)));
Symbols\Source\SourceNamedTypeSymbol.cs (23)
265internal ImmutableArray<TypeWithAnnotations> GetTypeParameterConstraintTypes(int ordinal)
268return (constraintTypes.Length > 0) ? constraintTypes[ordinal] : ImmutableArray<TypeWithAnnotations>.Empty;
271private ImmutableArray<ImmutableArray<TypeWithAnnotations>> GetTypeParameterConstraintTypes()
313private ImmutableArray<ImmutableArray<TypeWithAnnotations>> MakeTypeParameterConstraintTypes(BindingDiagnosticBag diagnostics)
507ImmutableArray<TypeWithAnnotations> originalConstraintTypes = constraint.ConstraintTypes;
508ArrayBuilder<TypeWithAnnotations> mergedConstraintTypes = null;
509SmallDictionary<TypeWithAnnotations, int> originalConstraintTypesMap = null;
556static bool mergeConstraints(ImmutableArray<TypeWithAnnotations> originalConstraintTypes,
557ref SmallDictionary<TypeWithAnnotations, int> originalConstraintTypesMap, ref ArrayBuilder<TypeWithAnnotations> mergedConstraintTypes,
577TypeWithAnnotations.EqualsComparer.IgnoreNullableModifiersForReferenceTypesComparer);
578SmallDictionary<TypeWithAnnotations, int> clauseConstraintTypesMap = toDictionary(clause.ConstraintTypes, originalConstraintTypesMap.Comparer);
582TypeWithAnnotations constraintType1 = mergedConstraintTypes?[index1] ?? originalConstraintTypes[index1];
592TypeWithAnnotations constraintType2 = clause.ConstraintTypes[index2];
606mergedConstraintTypes = ArrayBuilder<TypeWithAnnotations>.GetInstance(originalConstraintTypes.Length);
626static SmallDictionary<TypeWithAnnotations, int> toDictionary(ImmutableArray<TypeWithAnnotations> constraintTypes, IEqualityComparer<TypeWithAnnotations> comparer)
628var result = new SmallDictionary<TypeWithAnnotations, int>(comparer);
661ImmutableArray<TypeWithAnnotations> originalConstraintTypes = constraint.ConstraintTypes;
694static void mergeConstraints(ref TypeParameterConstraintKind mergedKind, ImmutableArray<TypeWithAnnotations> originalConstraintTypes, TypeParameterConstraintClause clause)
735internal sealed override ImmutableArray<TypeWithAnnotations> TypeArgumentsWithAnnotationsNoUseSiteDiagnostics
1865TypeWithAnnotations elementType = elementField.TypeWithAnnotations;
Symbols\Synthesized\Records\SynthesizedRecordObjEquals.cs (3)
26protected override (TypeWithAnnotations ReturnType, ImmutableArray<ParameterSymbol> Parameters)
32return (ReturnType: TypeWithAnnotations.Create(Binder.GetSpecialType(compilation, SpecialType.System_Boolean, location, diagnostics)),
35TypeWithAnnotations.Create(Binder.GetSpecialType(compilation, SpecialType.System_Object, location, diagnostics), annotation),
Symbols\Synthesized\Records\SynthesizedRecordPrintMembers.cs (3)
89protected override (TypeWithAnnotations ReturnType, ImmutableArray<ParameterSymbol> Parameters) MakeParametersAndBindReturnType(BindingDiagnosticBag diagnostics)
94return (ReturnType: TypeWithAnnotations.Create(Binder.GetSpecialType(compilation, SpecialType.System_Boolean, location, diagnostics)),
97TypeWithAnnotations.Create(Binder.GetWellKnownType(compilation, WellKnownType.System_Text_StringBuilder, diagnostics, location), annotation),
Symbols\Synthesized\SynthesizedDelegateSymbol.cs (8)
21SynthesizedParameterSymbol.Create(this, TypeWithAnnotations.Create(objectType), 0, RefKind.None, "object"),
22SynthesizedParameterSymbol.Create(this, TypeWithAnnotations.Create(intPtrType), 1, RefKind.None, "method"));
35internal ParameterDescription(TypeWithAnnotations type, RefKind refKind, ScopedKind scope, ConstantValue? defaultValue, bool isParams, bool hasUnscopedRefAttribute)
45internal readonly TypeWithAnnotations Type;
58TypeWithAnnotations returnType,
165public override TypeWithAnnotations ReturnTypeWithAnnotations { get; }
171public override ImmutableArray<TypeWithAnnotations> TypeArgumentsWithAnnotations
173get { return ImmutableArray<TypeWithAnnotations>.Empty; }
Symbols\Synthesized\SynthesizedEntryPointSymbol.cs (14)
44return new ScriptEntryPoint(containingType, TypeWithAnnotations.Create(systemVoid));
125public override ImmutableArray<TypeWithAnnotations> TypeArgumentsWithAnnotations
127get { return ImmutableArray<TypeWithAnnotations>.Empty; }
392public override TypeWithAnnotations ReturnTypeWithAnnotations => TypeWithAnnotations.Create(_getAwaiterGetResultCall.Type);
444private readonly TypeWithAnnotations _returnType;
446internal ScriptEntryPoint(NamedTypeSymbol containingType, TypeWithAnnotations returnType) :
458public override TypeWithAnnotations ReturnTypeWithAnnotations => _returnType;
484new SynthesizedLocal(this, TypeWithAnnotations.Create(_containingType), SynthesizedLocalKind.LoweringTemp),
533private readonly TypeWithAnnotations _returnType;
535internal SubmissionEntryPoint(NamedTypeSymbol containingType, TypeWithAnnotations returnType, TypeSymbol submissionArrayType) :
541TypeWithAnnotations.Create(submissionArrayType), 0, RefKind.None, "submissionArray"));
556public override TypeWithAnnotations ReturnTypeWithAnnotations => _returnType;
576new SynthesizedLocal(this, TypeWithAnnotations.Create(_containingType), SynthesizedLocalKind.LoweringTemp),
Symbols\TypeMap.cs (21)
24public static readonly Func<TypeWithAnnotations, TypeSymbol> AsTypeSymbol = t => t.Type;
26internal static ImmutableArray<TypeWithAnnotations> TypeParametersAsTypeSymbolsWithAnnotations(ImmutableArray<TypeParameterSymbol> typeParameters)
28return typeParameters.SelectAsArray(static (tp) => TypeWithAnnotations.Create(tp));
31internal static ImmutableArray<TypeWithAnnotations> TypeParametersAsTypeSymbolsWithIgnoredAnnotations(ImmutableArray<TypeParameterSymbol> typeParameters)
33return typeParameters.SelectAsArray(static (tp) => TypeWithAnnotations.Create(tp, NullableAnnotation.Ignored));
36internal static ImmutableArray<TypeSymbol> AsTypeSymbols(ImmutableArray<TypeWithAnnotations> typesOpt)
42internal TypeMap(ImmutableArray<TypeParameterSymbol> from, ImmutableArray<TypeWithAnnotations> to, bool allowAlpha = false)
56private TypeMap(SmallDictionary<TypeParameterSymbol, TypeWithAnnotations> mapping)
57: base(new SmallDictionary<TypeParameterSymbol, TypeWithAnnotations>(mapping, ReferenceEqualityComparer.Instance))
62private static SmallDictionary<TypeParameterSymbol, TypeWithAnnotations> ForType(NamedTypeSymbol containingType)
66new SmallDictionary<TypeParameterSymbol, TypeWithAnnotations>(substituted.TypeSubstitution.Mapping, ReferenceEqualityComparer.Instance) :
67new SmallDictionary<TypeParameterSymbol, TypeWithAnnotations>(ReferenceEqualityComparer.Instance);
70internal TypeMap(NamedTypeSymbol containingType, ImmutableArray<TypeParameterSymbol> typeParameters, ImmutableArray<TypeWithAnnotations> typeArguments)
76TypeWithAnnotations ta = typeArguments[i];
84private static readonly SmallDictionary<TypeParameterSymbol, TypeWithAnnotations> s_emptyDictionary =
85new SmallDictionary<TypeParameterSymbol, TypeWithAnnotations>(ReferenceEqualityComparer.Instance);
130result.Mapping.Add(tp, TypeWithAnnotations.Create(newTp));
200private static SmallDictionary<TypeParameterSymbol, TypeWithAnnotations> ConstructMapping(ImmutableArray<TypeParameterSymbol> from, ImmutableArray<TypeWithAnnotations> to)
202var mapping = new SmallDictionary<TypeParameterSymbol, TypeWithAnnotations>(ReferenceEqualityComparer.Instance);
209TypeWithAnnotations ta = to[i];
Symbols\TypeSymbolExtensions.cs (31)
120foreach (var constraintType in constraintTypes)
170public static TypeWithAnnotations GetNullableUnderlyingTypeWithAnnotations(this TypeSymbol type)
378internal static bool IsArrayInterface(this TypeSymbol type, out TypeWithAnnotations typeArgument)
596public static bool TryGetElementTypesWithAnnotationsIfTupleType(this TypeSymbol type, out ImmutableArray<TypeWithAnnotations> elementTypes)
605elementTypes = default(ImmutableArray<TypeWithAnnotations>);
747/// <param name="useDefaultType">If true, use <see cref="TypeWithAnnotations.DefaultType"/>
748/// instead of <see cref="TypeWithAnnotations.Type"/> to avoid early resolution of nullable types</param>
750this TypeWithAnnotations typeWithAnnotationsOpt,
752Func<TypeWithAnnotations, T, bool, bool>? typeWithAnnotationsPredicate,
830TypeWithAnnotations next;
869(TypeWithAnnotations nextTypeWithAnnotations, TypeSymbol? nextType) = getNextIterationElements(fields[i].TypeWithAnnotations, canDigThroughNullable);
900(TypeWithAnnotations nextTypeWithAnnotations, TypeSymbol? nextType) = getNextIterationElements(typeArguments[i], canDigThroughNullable);
949static (TypeWithAnnotations, TypeSymbol?) getNextIterationElements(TypeWithAnnotations type, bool canDigThroughNullable)
950=> canDigThroughNullable ? (default(TypeWithAnnotations), type.NullableUnderlyingTypeOrSelf) : (type, null);
952static TypeSymbol? visitFunctionPointerType(FunctionPointerTypeSymbol type, Func<TypeWithAnnotations, T, bool, bool>? typeWithAnnotationsPredicate, Func<TypeSymbol, T, bool, bool>? typePredicate, T arg, bool useDefaultType, bool canDigThroughNullable, bool visitCustomModifiers, out TypeWithAnnotations next)
979(TypeWithAnnotations nextTypeWithAnnotations, TypeSymbol? nextType) = getNextIterationElements(currentPointer.Parameters[i].TypeWithAnnotations, canDigThroughNullable);
1252internal static bool ContainsNativeIntegerWrapperType(this TypeWithAnnotations type)
1595foreach (var arg in type.TypeArgumentsWithAnnotationsNoUseSiteDiagnostics)
1952private static bool NormalizeTaskTypesInType(CSharpCompilation compilation, ref TypeWithAnnotations typeWithAnnotations)
1957typeWithAnnotations = TypeWithAnnotations.Create(type, customModifiers: typeWithAnnotations.CustomModifiers);
1970var typeArgumentsBuilder = ArrayBuilder<TypeWithAnnotations>.GetInstance();
1981typeArgumentsBuilder[i] = TypeWithAnnotations.Create(typeArgNormalized, customModifiers: typeWithModifier.CustomModifiers);
2021var elementType = arrayType.ElementTypeWithAnnotations;
2032var pointedAtType = pointerType.PointedAtTypeWithAnnotations;
2044var returnType = funcPtrType.Signature.ReturnTypeWithAnnotations;
2047var paramTypes = ImmutableArray<TypeWithAnnotations>.Empty;
2051var paramsBuilder = ArrayBuilder<TypeWithAnnotations>.GetInstance(funcPtrType.Signature.ParameterCount);
2055var paramType = param.TypeWithAnnotations;
2084this TypeWithAnnotations type,
Symbols\TypeUnification.cs (17)
30var substituted1 = SubstituteAllTypeParameters(substitution, TypeWithAnnotations.Create(t1));
31var substituted2 = SubstituteAllTypeParameters(substitution, TypeWithAnnotations.Create(t2));
41private static TypeWithAnnotations SubstituteAllTypeParameters(AbstractTypeMap? substitution, TypeWithAnnotations type)
45TypeWithAnnotations previous;
59return CanUnifyHelper(TypeWithAnnotations.Create(t1), TypeWithAnnotations.Create(t2), ref substitution);
79private static bool CanUnifyHelper(TypeWithAnnotations t1, TypeWithAnnotations t2, ref MutableTypeMap? substitution)
101TypeWithAnnotations tmp = t1;
207AddSubstitution(ref substitution, tp1, TypeWithAnnotations.Create(t2.Type));
215TypeWithAnnotations.Create(t2.Type,
234TypeWithAnnotations.Create(t1.Type,
249private static void AddSubstitution(ref MutableTypeMap? substitution, TypeParameterSymbol tp1, TypeWithAnnotations t2)
280foreach (TypeWithAnnotations typePart in typeParts)
Symbols\TypeWithAnnotations.cs (97)
29internal readonly TypeWithAnnotations Value;
30internal Boxed(TypeWithAnnotations value)
75internal static TypeWithAnnotations Create(bool isNullableEnabled, TypeSymbol typeSymbol, bool isAnnotated = false)
85internal static TypeWithAnnotations Create(TypeSymbol typeSymbol, NullableAnnotation nullableAnnotation = NullableAnnotation.Oblivious, ImmutableArray<CustomModifier> customModifiers = default)
108internal TypeWithAnnotations AsAnnotated()
118internal TypeWithAnnotations AsNotAnnotated()
168private static TypeWithAnnotations CreateNonLazyType(TypeSymbol typeSymbol, NullableAnnotation nullableAnnotation, ImmutableArray<CustomModifier> customModifiers)
173private static TypeWithAnnotations CreateLazyNullableTypeParameter(CSharpCompilation compilation, TypeWithAnnotations underlying)
178private static TypeWithAnnotations CreateLazySubstitutedType(TypeSymbol substitutedTypeSymbol, ImmutableArray<CustomModifier> customModifiers, TypeParameterSymbol typeParameter)
194public TypeWithAnnotations SetIsAnnotated(CSharpCompilation compilation)
222TypeWithAnnotations makeNullableT()
235private TypeWithAnnotations AsNullableReferenceType() => _extensions.AsNullableReferenceType(this);
236public TypeWithAnnotations AsNotNullableReferenceType() => _extensions.AsNotNullableReferenceType(this);
241internal TypeWithAnnotations MergeEquivalentTypes(TypeWithAnnotations other, VarianceKind variance)
250public TypeWithAnnotations WithModifiers(ImmutableArray<CustomModifier> customModifiers) =>
338public bool Equals(TypeWithAnnotations other, TypeCompareKind comparison)
390internal sealed class EqualsComparer : EqualityComparer<TypeWithAnnotations>
402public override int GetHashCode(TypeWithAnnotations obj)
411public override bool Equals(TypeWithAnnotations x, TypeWithAnnotations y)
421internal bool TypeSymbolEquals(TypeWithAnnotations other, TypeCompareKind comparison) =>
436public TypeWithAnnotations SubstituteType(AbstractTypeMap typeMap) =>
439internal TypeWithAnnotations SubstituteTypeCore(AbstractTypeMap typeMap)
446var newTypeWithModifiers = typeMap.SubstituteType(typeSymbol);
542private bool TypeSymbolEqualsCore(TypeWithAnnotations other, TypeCompareKind comparison)
567public TypeWithAnnotations WithTypeAndModifiers(TypeSymbol typeSymbol, ImmutableArray<CustomModifier> customModifiers) =>
570public TypeWithAnnotations WithType(TypeSymbol typeSymbol) =>
590TypeWithAnnotations typeWithAnnotationsOpt,
625private static void AddNullableTransforms(TypeWithAnnotations typeWithAnnotations, ArrayBuilder<byte> transforms)
661public bool ApplyNullableTransforms(byte defaultTransformFlag, ImmutableArray<byte> transforms, ref int position, out TypeWithAnnotations result)
724public TypeWithAnnotations WithTopLevelNonNullability()
735public TypeWithAnnotations SetUnknownNullabilityForReferenceTypes()
763return other is TypeWithAnnotations t && this.Equals(t, TypeCompareKind.ConsiderEverything);
781public static bool operator ==(TypeWithAnnotations? x, TypeWithAnnotations? y)
789public static bool operator !=(TypeWithAnnotations? x, TypeWithAnnotations? y)
795internal bool IsSameAs(TypeWithAnnotations other)
856internal abstract TypeWithAnnotations AsNullableReferenceType(TypeWithAnnotations type);
857internal abstract TypeWithAnnotations AsNotNullableReferenceType(TypeWithAnnotations type);
859internal abstract TypeWithAnnotations WithModifiers(TypeWithAnnotations type, ImmutableArray<CustomModifier> customModifiers);
873internal abstract TypeWithAnnotations WithTypeAndModifiers(TypeWithAnnotations type, TypeSymbol typeSymbol, ImmutableArray<CustomModifier> customModifiers);
875internal abstract bool TypeSymbolEquals(TypeWithAnnotations type, TypeWithAnnotations other, TypeCompareKind comparison);
876internal abstract TypeWithAnnotations SubstituteType(TypeWithAnnotations type, AbstractTypeMap typeMap);
877internal abstract void ReportDiagnosticsIfObsolete(TypeWithAnnotations type, Binder binder, SyntaxNode syntax, BindingDiagnosticBag diagnostics);
907internal override TypeWithAnnotations WithModifiers(TypeWithAnnotations type, ImmutableArray<CustomModifier> customModifiers)
914internal override TypeWithAnnotations WithTypeAndModifiers(TypeWithAnnotations type, TypeSymbol typeSymbol, ImmutableArray<CustomModifier> customModifiers)
919internal override TypeWithAnnotations AsNullableReferenceType(TypeWithAnnotations type)
924internal override TypeWithAnnotations AsNotNullableReferenceType(TypeWithAnnotations type)
930internal override bool TypeSymbolEquals(TypeWithAnnotations type, TypeWithAnnotations other, TypeCompareKind comparison)
935internal override TypeWithAnnotations SubstituteType(TypeWithAnnotations type, AbstractTypeMap typeMap)
940internal override void ReportDiagnosticsIfObsolete(TypeWithAnnotations type, Binder binder, SyntaxNode syntax, BindingDiagnosticBag diagnostics)
1012internal override TypeWithAnnotations WithModifiers(TypeWithAnnotations type, ImmutableArray<CustomModifier> customModifiers)
1017internal override TypeWithAnnotations WithTypeAndModifiers(TypeWithAnnotations type, TypeSymbol typeSymbol, ImmutableArray<CustomModifier> customModifiers)
1022internal override TypeWithAnnotations AsNullableReferenceType(TypeWithAnnotations type)
1027internal override TypeWithAnnotations AsNotNullableReferenceType(TypeWithAnnotations type)
1033internal override void ReportDiagnosticsIfObsolete(TypeWithAnnotations type, Binder binder, SyntaxNode syntax, BindingDiagnosticBag diagnostics)
1038internal override bool TypeSymbolEquals(TypeWithAnnotations type, TypeWithAnnotations other, TypeCompareKind comparison)
1043internal override TypeWithAnnotations SubstituteType(TypeWithAnnotations type, AbstractTypeMap typeMap)
1062private readonly TypeWithAnnotations _underlying;
1065public LazyNullableTypeParameter(CSharpCompilation compilation, TypeWithAnnotations underlying)
1112internal override TypeWithAnnotations WithModifiers(TypeWithAnnotations type, ImmutableArray<CustomModifier> customModifiers)
1122return TypeWithAnnotations.Create(resolvedType, type.NullableAnnotation, customModifiers: customModifiers);
1128internal override TypeWithAnnotations WithTypeAndModifiers(TypeWithAnnotations type, TypeSymbol typeSymbol, ImmutableArray<CustomModifier> customModifiers)
1132return TypeWithAnnotations.Create(typeSymbol, type.NullableAnnotation, customModifiers: customModifiers);
1138internal override TypeWithAnnotations AsNullableReferenceType(TypeWithAnnotations type)
1143internal override TypeWithAnnotations AsNotNullableReferenceType(TypeWithAnnotations type)
1152internal override TypeWithAnnotations SubstituteType(TypeWithAnnotations type, AbstractTypeMap typeMap)
1159var newUnderlying = _underlying.SubstituteTypeCore(typeMap);
1176internal override void ReportDiagnosticsIfObsolete(TypeWithAnnotations type, Binder binder, SyntaxNode syntax, BindingDiagnosticBag diagnostics)
1188internal override bool TypeSymbolEquals(TypeWithAnnotations type, TypeWithAnnotations other, TypeCompareKind comparison)