BoundTree\UnboundLambda.cs (40)
97internal BoundLambda WithInAnonymousFunctionConversion()
104var result = (BoundLambda)MemberwiseClone();
198BoundLambda node, Binder binder, TypeSymbol? delegateType, bool isAsync, ConversionsBase conversions)
467public BoundLambda Bind(NamedTypeSymbol delegateType, bool isExpressionTree)
470public BoundLambda BindForErrorRecovery()
473public BoundLambda BindForReturnTypeInference(NamedTypeSymbol delegateType)
476private BoundLambda SuppressIfNeeded(BoundLambda lambda)
477=> this.IsSuppressed ? (BoundLambda)lambda.WithSuppression() : lambda;
543Constraint = "Avoid " + nameof(ConcurrentDictionary<(NamedTypeSymbol, bool), BoundLambda>) + " which has a large default size, but this cache is normally small.")]
544private ImmutableDictionary<(NamedTypeSymbol Type, bool IsExpressionLambda), BoundLambda>? _bindingCache;
548Constraint = "Avoid " + nameof(ConcurrentDictionary<ReturnInferenceCacheKey, BoundLambda>) + " which has a large default size, but this cache is normally small.")]
549private ImmutableDictionary<ReturnInferenceCacheKey, BoundLambda>? _returnInferenceCache;
551private BoundLambda? _errorBinding;
560_bindingCache = ImmutableDictionary<(NamedTypeSymbol Type, bool IsExpressionLambda), BoundLambda>.Empty.WithComparers(BindingCacheComparer.Instance);
561_returnInferenceCache = ImmutableDictionary<ReturnInferenceCacheKey, BoundLambda>.Empty;
636public BoundLambda Bind(NamedTypeSymbol delegateType, bool isTargetExpressionTree)
640if (!_bindingCache!.TryGetValue((delegateType, inExpressionTree), out BoundLambda? result))
652foreach (var lambda in _returnInferenceCache!.Values)
762BoundLambda.BlockReturns.GetReturnTypes(returnTypes, block);
763var inferredReturnType = BoundLambda.InferReturnType(
818private BoundLambda ReallyBind(NamedTypeSymbol delegateType, bool inExpressionTree)
848_returnInferenceCache!.TryGetValue(cacheKey, out BoundLambda? returnInferenceLambda) &&
926var result = new BoundLambda(_unboundLambda.Syntax, _unboundLambda, block, diagnostics.ToReadOnlyAndFree(), lambdaBodyBinder, delegateType, inferredReturnType: default)
983private BoundLambda ReallyInferReturnType(
1009BoundLambda.BlockReturns.GetReturnTypes(returnTypes, block);
1010inferredReturnType = BoundLambda.InferReturnType(returnTypes, _unboundLambda, lambdaBodyBinder, delegateType, lambdaSymbol.IsAsync, lambdaBodyBinder.Conversions);
1029var result = new BoundLambda(
1071public BoundLambda BindForReturnTypeInference(NamedTypeSymbol delegateType)
1075BoundLambda? result;
1086/// Behavior of this key should be kept aligned with <see cref="BoundLambda.InferReturnTypeImpl"/>.
1221public BoundLambda BindForErrorRecovery()
1239private BoundLambda ReallyBindForErrorRecovery()
1251[return: NotNullIfNotNull(nameof(lambda))] BoundLambda? rebind(BoundLambda? lambda)
1261private BoundLambda ReallyBindForErrorRecovery(
1307private static BoundLambda? GuessBestBoundLambda<T>(ImmutableDictionary<T, BoundLambda> candidates)
1318IEnumerable<KeyValuePair<T, BoundLambda>> minDiagnosticsGroup = candidates.GroupBy(lambda => lambda.Value.Diagnostics.Diagnostics.Length).OrderBy(group => group.Key).First();
FlowAnalysis\NullableWalker.cs (15)
1815BoundLambda lambda,
1980if (node is BoundLambda boundLambda && originalSymbol is LambdaSymbol l && updatedSymbol is NamedTypeSymbol n)
8871return getUnboundLambda((BoundLambda)argument, GetVariableState(_variables, lambdaState.Value), _getterNullResilienceData);
8928static UnboundLambda getUnboundLambda(BoundLambda expr, VariableState variableState, GetterNullResilienceData? getterNullResilienceData)
9691private void ReportNullabilityMismatchWithTargetDelegate(Location location, NamedTypeSymbol delegateType, BoundLambda lambda)
9897if (conversionOperand is BoundLambda lambda)
10870case BoundLambda lambda:
10958Action<NamedTypeSymbol>? visitLambdaArgument(NamedTypeSymbol delegateType, BoundLambda lambda, bool isTargetTyped)
10965Action<NamedTypeSymbol>? analyzeLambdaConversion(NamedTypeSymbol delegateType, BoundLambda lambda, bool isTargetTyped)
10982Action<NamedTypeSymbol> analyzeLambdaConversionAsContinuation(BoundLambda lambda)
11122public override BoundNode? VisitLambda(BoundLambda node)
11136private void VisitLambda(BoundLambda node, NamedTypeSymbol? delegateTypeOpt, Optional<LocalState> initialState = default)
11156private static void UseDelegateInvokeParameterAndReturnTypes(BoundLambda lambda, MethodSymbol? delegateInvokeMethod, out bool useDelegateInvokeParameterTypes, out bool useDelegateInvokeReturnType)
11175var lambda = node.BindForErrorRecovery();
12695if (child is BoundLambda lambda)
Generated\BoundNodes.xml.Generated.cs (10)
7754public BoundLambda Update(UnboundLambda unboundLambda, MethodSymbol symbol, BoundBlock body, ReadOnlyBindingDiagnostic<AssemblySymbol> diagnostics, Binder binder, TypeSymbol? type)
7758var result = new BoundLambda(this.Syntax, unboundLambda, symbol, body, diagnostics, binder, type, this.HasErrors);
9500return VisitLambda((BoundLambda)node, arg);
9780public virtual R VisitLambda(BoundLambda node, A arg) => this.DefaultVisit(node, arg);
10021public virtual BoundNode? VisitLambda(BoundLambda node) => this.DefaultVisit(node);
10934public override BoundNode? VisitLambda(BoundLambda node)
12442public override BoundNode? VisitLambda(BoundLambda node)
15035public override BoundNode? VisitLambda(BoundLambda node)
15040BoundLambda updatedNode;
17341public override TreeDumperNode VisitLambda(BoundLambda node, object? arg) => new TreeDumperNode("lambda", null, new TreeDumperNode[]