2931 lines
132 KiB
C#
2931 lines
132 KiB
C#
using System.Collections.Immutable;
|
|
using Microsoft.CodeAnalysis.CSharp.Symbols;
|
|
using Microsoft.CodeAnalysis.PooledObjects;
|
|
using Roslyn.Utilities;
|
|
|
|
namespace Microsoft.CodeAnalysis.CSharp;
|
|
|
|
internal sealed class NullabilityRewriter : BoundTreeRewriter
|
|
{
|
|
private readonly ImmutableDictionary<BoundExpression, (NullabilityInfo Info, TypeSymbol? Type)> _updatedNullabilities;
|
|
|
|
private readonly NullableWalker.SnapshotManager? _snapshotManager;
|
|
|
|
private readonly ImmutableDictionary<Symbol, Symbol>.Builder _remappedSymbols;
|
|
|
|
protected override BoundExpression? VisitExpressionWithoutStackGuard(BoundExpression node)
|
|
{
|
|
return (BoundExpression)Visit(node);
|
|
}
|
|
|
|
public override BoundNode? VisitBinaryOperator(BoundBinaryOperator node)
|
|
{
|
|
return VisitBinaryOperatorBase(node);
|
|
}
|
|
|
|
public override BoundNode? VisitUserDefinedConditionalLogicalOperator(BoundUserDefinedConditionalLogicalOperator node)
|
|
{
|
|
return VisitBinaryOperatorBase(node);
|
|
}
|
|
|
|
private BoundNode VisitBinaryOperatorBase(BoundBinaryOperatorBase binaryOperator)
|
|
{
|
|
//IL_0126: Unknown result type (might be due to invalid IL or missing references)
|
|
ArrayBuilder<BoundBinaryOperatorBase> instance = ArrayBuilder<BoundBinaryOperatorBase>.GetInstance();
|
|
BoundBinaryOperatorBase boundBinaryOperatorBase = binaryOperator;
|
|
do
|
|
{
|
|
ArrayBuilderExtensions.Push<BoundBinaryOperatorBase>(instance, boundBinaryOperatorBase);
|
|
boundBinaryOperatorBase = boundBinaryOperatorBase.Left as BoundBinaryOperatorBase;
|
|
}
|
|
while (boundBinaryOperatorBase != null);
|
|
BoundExpression left = (BoundExpression)Visit(ArrayBuilderExtensions.Peek<BoundBinaryOperatorBase>(instance).Left);
|
|
do
|
|
{
|
|
boundBinaryOperatorBase = ArrayBuilderExtensions.Pop<BoundBinaryOperatorBase>(instance);
|
|
(NullabilityInfo, TypeSymbol) value;
|
|
bool num = _updatedNullabilities.TryGetValue(boundBinaryOperatorBase, out value);
|
|
BoundExpression right = (BoundExpression)Visit(boundBinaryOperatorBase.Right);
|
|
TypeSymbol type = (num ? value.Item2 : boundBinaryOperatorBase.Type);
|
|
BoundBinaryOperatorBase boundBinaryOperatorBase2;
|
|
if (!(boundBinaryOperatorBase is BoundBinaryOperator boundBinaryOperator))
|
|
{
|
|
if (!(boundBinaryOperatorBase is BoundUserDefinedConditionalLogicalOperator boundUserDefinedConditionalLogicalOperator))
|
|
{
|
|
throw ExceptionUtilities.UnexpectedValue((object)boundBinaryOperatorBase.Kind);
|
|
}
|
|
boundBinaryOperatorBase2 = boundUserDefinedConditionalLogicalOperator.Update(boundUserDefinedConditionalLogicalOperator.OperatorKind, boundUserDefinedConditionalLogicalOperator.LogicalOperator, boundUserDefinedConditionalLogicalOperator.TrueOperator, boundUserDefinedConditionalLogicalOperator.FalseOperator, boundUserDefinedConditionalLogicalOperator.ConstrainedToTypeOpt, boundUserDefinedConditionalLogicalOperator.ResultKind, boundUserDefinedConditionalLogicalOperator.OriginalUserDefinedOperatorsOpt, left, right, type);
|
|
}
|
|
else
|
|
{
|
|
boundBinaryOperatorBase2 = boundBinaryOperator.Update(boundBinaryOperator.OperatorKind, boundBinaryOperator.Data?.WithUpdatedMethod(GetUpdatedSymbol(boundBinaryOperator, boundBinaryOperator.Method)), boundBinaryOperator.ResultKind, left, right, type);
|
|
}
|
|
boundBinaryOperatorBase = boundBinaryOperatorBase2;
|
|
if (num)
|
|
{
|
|
(boundBinaryOperatorBase.TopLevelNullability, _) = value;
|
|
}
|
|
left = boundBinaryOperatorBase;
|
|
}
|
|
while (instance.Count > 0);
|
|
return boundBinaryOperatorBase;
|
|
}
|
|
|
|
private T GetUpdatedSymbol<T>(BoundNode expr, T sym) where T : Symbol?
|
|
{
|
|
if ((object)sym == null)
|
|
{
|
|
return sym;
|
|
}
|
|
Symbol updatedSymbol = null;
|
|
NullableWalker.SnapshotManager? snapshotManager = _snapshotManager;
|
|
if (snapshotManager == null || !snapshotManager.TryGetUpdatedSymbol(expr, sym, out updatedSymbol))
|
|
{
|
|
updatedSymbol = sym;
|
|
}
|
|
if (!(updatedSymbol is LambdaSymbol lambda))
|
|
{
|
|
if (!(updatedSymbol is SourceLocalSymbol local))
|
|
{
|
|
if (updatedSymbol is ParameterSymbol key && _remappedSymbols.TryGetValue(key, out Symbol value))
|
|
{
|
|
return (T)value;
|
|
}
|
|
return (T)updatedSymbol;
|
|
}
|
|
return (T)remapLocal(local);
|
|
}
|
|
return (T)remapLambda((BoundLambda)expr, lambda);
|
|
Symbol remapLambda(BoundLambda boundLambda, LambdaSymbol lambdaSymbol)
|
|
{
|
|
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
|
|
NamedTypeSymbol namedTypeSymbol = _snapshotManager?.GetUpdatedDelegateTypeForLambda(lambdaSymbol);
|
|
if (!_remappedSymbols.TryGetValue(lambdaSymbol.ContainingSymbol, out Symbol value2) && (object)namedTypeSymbol == null)
|
|
{
|
|
return lambdaSymbol;
|
|
}
|
|
LambdaSymbol lambdaSymbol2 = (((object)namedTypeSymbol != null) ? boundLambda.CreateLambdaSymbol(namedTypeSymbol, value2 ?? lambdaSymbol.ContainingSymbol) : boundLambda.CreateLambdaSymbol(value2, lambdaSymbol.ReturnTypeWithAnnotations, lambdaSymbol.ParameterTypesWithAnnotations, lambdaSymbol.ParameterRefKinds, lambdaSymbol.RefKind));
|
|
_remappedSymbols.Add(lambdaSymbol, lambdaSymbol2);
|
|
for (int i = 0; i < lambdaSymbol.ParameterCount; i++)
|
|
{
|
|
_remappedSymbols.Add(lambdaSymbol.Parameters[i], lambdaSymbol2.Parameters[i]);
|
|
}
|
|
return lambdaSymbol2;
|
|
}
|
|
Symbol remapLocal(SourceLocalSymbol sourceLocalSymbol)
|
|
{
|
|
if (_remappedSymbols.TryGetValue(sourceLocalSymbol, out Symbol value2))
|
|
{
|
|
return value2;
|
|
}
|
|
TypeWithAnnotations? typeWithAnnotations = _snapshotManager?.GetUpdatedTypeForLocalSymbol(sourceLocalSymbol);
|
|
if (!_remappedSymbols.TryGetValue(sourceLocalSymbol.ContainingSymbol, out Symbol value3) && !typeWithAnnotations.HasValue)
|
|
{
|
|
_remappedSymbols.Add(sourceLocalSymbol, sourceLocalSymbol);
|
|
return sourceLocalSymbol;
|
|
}
|
|
value2 = new UpdatedContainingSymbolAndNullableAnnotationLocal(sourceLocalSymbol, value3 ?? sourceLocalSymbol.ContainingSymbol, typeWithAnnotations ?? sourceLocalSymbol.TypeWithAnnotations);
|
|
_remappedSymbols.Add(sourceLocalSymbol, value2);
|
|
return value2;
|
|
}
|
|
}
|
|
|
|
public override BoundNode? VisitImplicitIndexerAccess(BoundImplicitIndexerAccess node)
|
|
{
|
|
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression receiver = (BoundExpression)Visit(node.Receiver);
|
|
BoundExpression argument = (BoundExpression)Visit(node.Argument);
|
|
BoundExpression lengthOrCountAccess = node.LengthOrCountAccess;
|
|
BoundExpression indexerOrSliceAccess = (BoundExpression)Visit(node.IndexerOrSliceAccess);
|
|
BoundImplicitIndexerAccess boundImplicitIndexerAccess;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundImplicitIndexerAccess = node.Update(receiver, argument, lengthOrCountAccess, node.ReceiverPlaceholder, indexerOrSliceAccess, node.ArgumentPlaceholders, value.Item2);
|
|
(boundImplicitIndexerAccess.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundImplicitIndexerAccess = node.Update(receiver, argument, lengthOrCountAccess, node.ReceiverPlaceholder, indexerOrSliceAccess, node.ArgumentPlaceholders, node.Type);
|
|
}
|
|
return boundImplicitIndexerAccess;
|
|
}
|
|
|
|
private ImmutableArray<T> GetUpdatedArray<T>(BoundNode expr, ImmutableArray<T> symbols) where T : Symbol?
|
|
{
|
|
if (symbols.IsDefaultOrEmpty)
|
|
{
|
|
return symbols;
|
|
}
|
|
ArrayBuilder<T> instance = ArrayBuilder<T>.GetInstance(symbols.Length);
|
|
bool flag = false;
|
|
ImmutableArray<T>.Enumerator enumerator = symbols.GetEnumerator();
|
|
while (enumerator.MoveNext())
|
|
{
|
|
T current = enumerator.Current;
|
|
T val = null;
|
|
if ((object)current != null)
|
|
{
|
|
val = GetUpdatedSymbol(expr, current);
|
|
if ((object)current != val)
|
|
{
|
|
flag = true;
|
|
}
|
|
}
|
|
instance.Add(val);
|
|
}
|
|
if (flag)
|
|
{
|
|
return instance.ToImmutableAndFree();
|
|
}
|
|
instance.Free();
|
|
return symbols;
|
|
}
|
|
|
|
public NullabilityRewriter(ImmutableDictionary<BoundExpression, (NullabilityInfo Info, TypeSymbol? Type)> updatedNullabilities, NullableWalker.SnapshotManager? snapshotManager, ImmutableDictionary<Symbol, Symbol>.Builder remappedSymbols)
|
|
{
|
|
_updatedNullabilities = updatedNullabilities;
|
|
_snapshotManager = snapshotManager;
|
|
_remappedSymbols = remappedSymbols;
|
|
}
|
|
|
|
public override BoundNode? VisitFieldEqualsValue(BoundFieldEqualsValue node)
|
|
{
|
|
FieldSymbol updatedSymbol = GetUpdatedSymbol(node, node.Field);
|
|
ImmutableArray<LocalSymbol> updatedArray = GetUpdatedArray(node, node.Locals);
|
|
BoundExpression value = (BoundExpression)Visit(node.Value);
|
|
return node.Update(updatedSymbol, updatedArray, value);
|
|
}
|
|
|
|
public override BoundNode? VisitPropertyEqualsValue(BoundPropertyEqualsValue node)
|
|
{
|
|
PropertySymbol updatedSymbol = GetUpdatedSymbol(node, node.Property);
|
|
ImmutableArray<LocalSymbol> updatedArray = GetUpdatedArray(node, node.Locals);
|
|
BoundExpression value = (BoundExpression)Visit(node.Value);
|
|
return node.Update(updatedSymbol, updatedArray, value);
|
|
}
|
|
|
|
public override BoundNode? VisitParameterEqualsValue(BoundParameterEqualsValue node)
|
|
{
|
|
ParameterSymbol updatedSymbol = GetUpdatedSymbol(node, node.Parameter);
|
|
ImmutableArray<LocalSymbol> updatedArray = GetUpdatedArray(node, node.Locals);
|
|
BoundExpression value = (BoundExpression)Visit(node.Value);
|
|
return node.Update(updatedSymbol, updatedArray, value);
|
|
}
|
|
|
|
public override BoundNode? VisitValuePlaceholder(BoundValuePlaceholder node)
|
|
{
|
|
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundValuePlaceholder boundValuePlaceholder = node.Update(value.Item2);
|
|
(boundValuePlaceholder.TopLevelNullability, _) = value;
|
|
return boundValuePlaceholder;
|
|
}
|
|
|
|
public override BoundNode? VisitCapturedReceiverPlaceholder(BoundCapturedReceiverPlaceholder node)
|
|
{
|
|
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression receiver = (BoundExpression)Visit(node.Receiver);
|
|
BoundCapturedReceiverPlaceholder boundCapturedReceiverPlaceholder;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundCapturedReceiverPlaceholder = node.Update(receiver, node.LocalScopeDepth, value.Item2);
|
|
(boundCapturedReceiverPlaceholder.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundCapturedReceiverPlaceholder = node.Update(receiver, node.LocalScopeDepth, node.Type);
|
|
}
|
|
return boundCapturedReceiverPlaceholder;
|
|
}
|
|
|
|
public override BoundNode? VisitDeconstructValuePlaceholder(BoundDeconstructValuePlaceholder node)
|
|
{
|
|
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
|
|
Symbol updatedSymbol = GetUpdatedSymbol(node, node.VariableSymbol);
|
|
BoundDeconstructValuePlaceholder boundDeconstructValuePlaceholder;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundDeconstructValuePlaceholder = node.Update(updatedSymbol, node.IsDiscardExpression, value.Item2);
|
|
(boundDeconstructValuePlaceholder.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundDeconstructValuePlaceholder = node.Update(updatedSymbol, node.IsDiscardExpression, node.Type);
|
|
}
|
|
return boundDeconstructValuePlaceholder;
|
|
}
|
|
|
|
public override BoundNode? VisitTupleOperandPlaceholder(BoundTupleOperandPlaceholder node)
|
|
{
|
|
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundTupleOperandPlaceholder boundTupleOperandPlaceholder = node.Update(value.Item2);
|
|
(boundTupleOperandPlaceholder.TopLevelNullability, _) = value;
|
|
return boundTupleOperandPlaceholder;
|
|
}
|
|
|
|
public override BoundNode? VisitAwaitableValuePlaceholder(BoundAwaitableValuePlaceholder node)
|
|
{
|
|
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundAwaitableValuePlaceholder boundAwaitableValuePlaceholder = node.Update(value.Item2);
|
|
(boundAwaitableValuePlaceholder.TopLevelNullability, _) = value;
|
|
return boundAwaitableValuePlaceholder;
|
|
}
|
|
|
|
public override BoundNode? VisitDisposableValuePlaceholder(BoundDisposableValuePlaceholder node)
|
|
{
|
|
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundDisposableValuePlaceholder boundDisposableValuePlaceholder = node.Update(value.Item2);
|
|
(boundDisposableValuePlaceholder.TopLevelNullability, _) = value;
|
|
return boundDisposableValuePlaceholder;
|
|
}
|
|
|
|
public override BoundNode? VisitObjectOrCollectionValuePlaceholder(BoundObjectOrCollectionValuePlaceholder node)
|
|
{
|
|
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundObjectOrCollectionValuePlaceholder boundObjectOrCollectionValuePlaceholder = node.Update(node.IsNewInstance, value.Item2);
|
|
(boundObjectOrCollectionValuePlaceholder.TopLevelNullability, _) = value;
|
|
return boundObjectOrCollectionValuePlaceholder;
|
|
}
|
|
|
|
public override BoundNode? VisitImplicitIndexerValuePlaceholder(BoundImplicitIndexerValuePlaceholder node)
|
|
{
|
|
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundImplicitIndexerValuePlaceholder boundImplicitIndexerValuePlaceholder = node.Update(value.Item2);
|
|
(boundImplicitIndexerValuePlaceholder.TopLevelNullability, _) = value;
|
|
return boundImplicitIndexerValuePlaceholder;
|
|
}
|
|
|
|
public override BoundNode? VisitImplicitIndexerReceiverPlaceholder(BoundImplicitIndexerReceiverPlaceholder node)
|
|
{
|
|
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundImplicitIndexerReceiverPlaceholder boundImplicitIndexerReceiverPlaceholder = node.Update(node.IsEquivalentToThisReference, value.Item2);
|
|
(boundImplicitIndexerReceiverPlaceholder.TopLevelNullability, _) = value;
|
|
return boundImplicitIndexerReceiverPlaceholder;
|
|
}
|
|
|
|
public override BoundNode? VisitListPatternReceiverPlaceholder(BoundListPatternReceiverPlaceholder node)
|
|
{
|
|
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundListPatternReceiverPlaceholder boundListPatternReceiverPlaceholder = node.Update(value.Item2);
|
|
(boundListPatternReceiverPlaceholder.TopLevelNullability, _) = value;
|
|
return boundListPatternReceiverPlaceholder;
|
|
}
|
|
|
|
public override BoundNode? VisitListPatternIndexPlaceholder(BoundListPatternIndexPlaceholder node)
|
|
{
|
|
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundListPatternIndexPlaceholder boundListPatternIndexPlaceholder = node.Update(value.Item2);
|
|
(boundListPatternIndexPlaceholder.TopLevelNullability, _) = value;
|
|
return boundListPatternIndexPlaceholder;
|
|
}
|
|
|
|
public override BoundNode? VisitSlicePatternReceiverPlaceholder(BoundSlicePatternReceiverPlaceholder node)
|
|
{
|
|
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundSlicePatternReceiverPlaceholder boundSlicePatternReceiverPlaceholder = node.Update(value.Item2);
|
|
(boundSlicePatternReceiverPlaceholder.TopLevelNullability, _) = value;
|
|
return boundSlicePatternReceiverPlaceholder;
|
|
}
|
|
|
|
public override BoundNode? VisitSlicePatternRangePlaceholder(BoundSlicePatternRangePlaceholder node)
|
|
{
|
|
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundSlicePatternRangePlaceholder boundSlicePatternRangePlaceholder = node.Update(value.Item2);
|
|
(boundSlicePatternRangePlaceholder.TopLevelNullability, _) = value;
|
|
return boundSlicePatternRangePlaceholder;
|
|
}
|
|
|
|
public override BoundNode? VisitDup(BoundDup node)
|
|
{
|
|
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundDup boundDup = node.Update(node.RefKind, value.Item2);
|
|
(boundDup.TopLevelNullability, _) = value;
|
|
return boundDup;
|
|
}
|
|
|
|
public override BoundNode? VisitPassByCopy(BoundPassByCopy node)
|
|
{
|
|
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression expression = (BoundExpression)Visit(node.Expression);
|
|
BoundPassByCopy boundPassByCopy;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundPassByCopy = node.Update(expression, value.Item2);
|
|
(boundPassByCopy.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundPassByCopy = node.Update(expression, node.Type);
|
|
}
|
|
return boundPassByCopy;
|
|
}
|
|
|
|
public override BoundNode? VisitBadExpression(BoundBadExpression node)
|
|
{
|
|
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
|
|
GetUpdatedArray(node, node.Symbols);
|
|
ImmutableArray<BoundExpression> childBoundNodes = VisitList(node.ChildBoundNodes);
|
|
BoundBadExpression boundBadExpression;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundBadExpression = node.Update(node.ResultKind, node.Symbols, childBoundNodes, value.Item2);
|
|
(boundBadExpression.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundBadExpression = node.Update(node.ResultKind, node.Symbols, childBoundNodes, node.Type);
|
|
}
|
|
return boundBadExpression;
|
|
}
|
|
|
|
public override BoundNode? VisitTypeExpression(BoundTypeExpression node)
|
|
{
|
|
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundTypeExpression boundContainingTypeOpt = (BoundTypeExpression)Visit(node.BoundContainingTypeOpt);
|
|
ImmutableArray<BoundExpression> boundDimensionsOpt = VisitList(node.BoundDimensionsOpt);
|
|
BoundTypeExpression boundTypeExpression;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundTypeExpression = node.Update(node.AliasOpt, boundContainingTypeOpt, boundDimensionsOpt, node.TypeWithAnnotations, value.Item2);
|
|
(boundTypeExpression.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundTypeExpression = node.Update(node.AliasOpt, boundContainingTypeOpt, boundDimensionsOpt, node.TypeWithAnnotations, node.Type);
|
|
}
|
|
return boundTypeExpression;
|
|
}
|
|
|
|
public override BoundNode? VisitTypeOrValueExpression(BoundTypeOrValueExpression node)
|
|
{
|
|
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundTypeOrValueExpression boundTypeOrValueExpression = node.Update(node.Data, value.Item2);
|
|
(boundTypeOrValueExpression.TopLevelNullability, _) = value;
|
|
return boundTypeOrValueExpression;
|
|
}
|
|
|
|
public override BoundNode? VisitNamespaceExpression(BoundNamespaceExpression node)
|
|
{
|
|
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundNamespaceExpression boundNamespaceExpression = node.Update(node.NamespaceSymbol, node.AliasOpt);
|
|
(boundNamespaceExpression.TopLevelNullability, _) = value;
|
|
return boundNamespaceExpression;
|
|
}
|
|
|
|
public override BoundNode? VisitUnaryOperator(BoundUnaryOperator node)
|
|
{
|
|
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
|
|
MethodSymbol updatedSymbol = GetUpdatedSymbol(node, node.MethodOpt);
|
|
TypeSymbol updatedSymbol2 = GetUpdatedSymbol(node, node.ConstrainedToTypeOpt);
|
|
GetUpdatedArray(node, node.OriginalUserDefinedOperatorsOpt);
|
|
BoundExpression operand = (BoundExpression)Visit(node.Operand);
|
|
BoundUnaryOperator boundUnaryOperator;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundUnaryOperator = node.Update(node.OperatorKind, operand, node.ConstantValueOpt, updatedSymbol, updatedSymbol2, node.ResultKind, node.OriginalUserDefinedOperatorsOpt, value.Item2);
|
|
(boundUnaryOperator.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundUnaryOperator = node.Update(node.OperatorKind, operand, node.ConstantValueOpt, updatedSymbol, updatedSymbol2, node.ResultKind, node.OriginalUserDefinedOperatorsOpt, node.Type);
|
|
}
|
|
return boundUnaryOperator;
|
|
}
|
|
|
|
public override BoundNode? VisitIncrementOperator(BoundIncrementOperator node)
|
|
{
|
|
//IL_009a: Unknown result type (might be due to invalid IL or missing references)
|
|
MethodSymbol updatedSymbol = GetUpdatedSymbol(node, node.MethodOpt);
|
|
TypeSymbol updatedSymbol2 = GetUpdatedSymbol(node, node.ConstrainedToTypeOpt);
|
|
GetUpdatedArray(node, node.OriginalUserDefinedOperatorsOpt);
|
|
BoundExpression operand = (BoundExpression)Visit(node.Operand);
|
|
BoundValuePlaceholder operandPlaceholder = node.OperandPlaceholder;
|
|
BoundExpression operandConversion = node.OperandConversion;
|
|
BoundValuePlaceholder resultPlaceholder = node.ResultPlaceholder;
|
|
BoundExpression resultConversion = node.ResultConversion;
|
|
BoundIncrementOperator boundIncrementOperator;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundIncrementOperator = node.Update(node.OperatorKind, operand, updatedSymbol, updatedSymbol2, operandPlaceholder, operandConversion, resultPlaceholder, resultConversion, node.ResultKind, node.OriginalUserDefinedOperatorsOpt, value.Item2);
|
|
(boundIncrementOperator.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundIncrementOperator = node.Update(node.OperatorKind, operand, updatedSymbol, updatedSymbol2, operandPlaceholder, operandConversion, resultPlaceholder, resultConversion, node.ResultKind, node.OriginalUserDefinedOperatorsOpt, node.Type);
|
|
}
|
|
return boundIncrementOperator;
|
|
}
|
|
|
|
public override BoundNode? VisitAddressOfOperator(BoundAddressOfOperator node)
|
|
{
|
|
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression operand = (BoundExpression)Visit(node.Operand);
|
|
BoundAddressOfOperator boundAddressOfOperator;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundAddressOfOperator = node.Update(operand, node.IsManaged, value.Item2);
|
|
(boundAddressOfOperator.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundAddressOfOperator = node.Update(operand, node.IsManaged, node.Type);
|
|
}
|
|
return boundAddressOfOperator;
|
|
}
|
|
|
|
public override BoundNode? VisitUnconvertedAddressOfOperator(BoundUnconvertedAddressOfOperator node)
|
|
{
|
|
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundMethodGroup operand = (BoundMethodGroup)Visit(node.Operand);
|
|
BoundUnconvertedAddressOfOperator boundUnconvertedAddressOfOperator;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundUnconvertedAddressOfOperator = node.Update(operand);
|
|
(boundUnconvertedAddressOfOperator.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundUnconvertedAddressOfOperator = node.Update(operand);
|
|
}
|
|
return boundUnconvertedAddressOfOperator;
|
|
}
|
|
|
|
public override BoundNode? VisitFunctionPointerLoad(BoundFunctionPointerLoad node)
|
|
{
|
|
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
|
|
MethodSymbol updatedSymbol = GetUpdatedSymbol(node, node.TargetMethod);
|
|
TypeSymbol updatedSymbol2 = GetUpdatedSymbol(node, node.ConstrainedToTypeOpt);
|
|
BoundFunctionPointerLoad boundFunctionPointerLoad;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundFunctionPointerLoad = node.Update(updatedSymbol, updatedSymbol2, value.Item2);
|
|
(boundFunctionPointerLoad.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundFunctionPointerLoad = node.Update(updatedSymbol, updatedSymbol2, node.Type);
|
|
}
|
|
return boundFunctionPointerLoad;
|
|
}
|
|
|
|
public override BoundNode? VisitPointerIndirectionOperator(BoundPointerIndirectionOperator node)
|
|
{
|
|
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression operand = (BoundExpression)Visit(node.Operand);
|
|
BoundPointerIndirectionOperator boundPointerIndirectionOperator;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundPointerIndirectionOperator = node.Update(operand, node.RefersToLocation, value.Item2);
|
|
(boundPointerIndirectionOperator.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundPointerIndirectionOperator = node.Update(operand, node.RefersToLocation, node.Type);
|
|
}
|
|
return boundPointerIndirectionOperator;
|
|
}
|
|
|
|
public override BoundNode? VisitPointerElementAccess(BoundPointerElementAccess node)
|
|
{
|
|
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression expression = (BoundExpression)Visit(node.Expression);
|
|
BoundExpression index = (BoundExpression)Visit(node.Index);
|
|
BoundPointerElementAccess boundPointerElementAccess;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundPointerElementAccess = node.Update(expression, index, node.Checked, node.RefersToLocation, value.Item2);
|
|
(boundPointerElementAccess.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundPointerElementAccess = node.Update(expression, index, node.Checked, node.RefersToLocation, node.Type);
|
|
}
|
|
return boundPointerElementAccess;
|
|
}
|
|
|
|
public override BoundNode? VisitFunctionPointerInvocation(BoundFunctionPointerInvocation node)
|
|
{
|
|
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression invokedExpression = (BoundExpression)Visit(node.InvokedExpression);
|
|
ImmutableArray<BoundExpression> arguments = VisitList(node.Arguments);
|
|
BoundFunctionPointerInvocation boundFunctionPointerInvocation;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundFunctionPointerInvocation = node.Update(invokedExpression, arguments, node.ArgumentRefKindsOpt, node.ResultKind, value.Item2);
|
|
(boundFunctionPointerInvocation.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundFunctionPointerInvocation = node.Update(invokedExpression, arguments, node.ArgumentRefKindsOpt, node.ResultKind, node.Type);
|
|
}
|
|
return boundFunctionPointerInvocation;
|
|
}
|
|
|
|
public override BoundNode? VisitRefTypeOperator(BoundRefTypeOperator node)
|
|
{
|
|
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
|
|
MethodSymbol updatedSymbol = GetUpdatedSymbol(node, node.GetTypeFromHandle);
|
|
BoundExpression operand = (BoundExpression)Visit(node.Operand);
|
|
BoundRefTypeOperator boundRefTypeOperator;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundRefTypeOperator = node.Update(operand, updatedSymbol, value.Item2);
|
|
(boundRefTypeOperator.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundRefTypeOperator = node.Update(operand, updatedSymbol, node.Type);
|
|
}
|
|
return boundRefTypeOperator;
|
|
}
|
|
|
|
public override BoundNode? VisitMakeRefOperator(BoundMakeRefOperator node)
|
|
{
|
|
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression operand = (BoundExpression)Visit(node.Operand);
|
|
BoundMakeRefOperator boundMakeRefOperator;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundMakeRefOperator = node.Update(operand, value.Item2);
|
|
(boundMakeRefOperator.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundMakeRefOperator = node.Update(operand, node.Type);
|
|
}
|
|
return boundMakeRefOperator;
|
|
}
|
|
|
|
public override BoundNode? VisitRefValueOperator(BoundRefValueOperator node)
|
|
{
|
|
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression operand = (BoundExpression)Visit(node.Operand);
|
|
BoundRefValueOperator boundRefValueOperator;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundRefValueOperator = node.Update(node.NullableAnnotation, operand, value.Item2);
|
|
(boundRefValueOperator.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundRefValueOperator = node.Update(node.NullableAnnotation, operand, node.Type);
|
|
}
|
|
return boundRefValueOperator;
|
|
}
|
|
|
|
public override BoundNode? VisitFromEndIndexExpression(BoundFromEndIndexExpression node)
|
|
{
|
|
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
|
|
MethodSymbol updatedSymbol = GetUpdatedSymbol(node, node.MethodOpt);
|
|
BoundExpression operand = (BoundExpression)Visit(node.Operand);
|
|
BoundFromEndIndexExpression boundFromEndIndexExpression;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundFromEndIndexExpression = node.Update(operand, updatedSymbol, value.Item2);
|
|
(boundFromEndIndexExpression.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundFromEndIndexExpression = node.Update(operand, updatedSymbol, node.Type);
|
|
}
|
|
return boundFromEndIndexExpression;
|
|
}
|
|
|
|
public override BoundNode? VisitRangeExpression(BoundRangeExpression node)
|
|
{
|
|
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
|
|
MethodSymbol updatedSymbol = GetUpdatedSymbol(node, node.MethodOpt);
|
|
BoundExpression leftOperandOpt = (BoundExpression)Visit(node.LeftOperandOpt);
|
|
BoundExpression rightOperandOpt = (BoundExpression)Visit(node.RightOperandOpt);
|
|
BoundRangeExpression boundRangeExpression;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundRangeExpression = node.Update(leftOperandOpt, rightOperandOpt, updatedSymbol, value.Item2);
|
|
(boundRangeExpression.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundRangeExpression = node.Update(leftOperandOpt, rightOperandOpt, updatedSymbol, node.Type);
|
|
}
|
|
return boundRangeExpression;
|
|
}
|
|
|
|
public override BoundNode? VisitTupleBinaryOperator(BoundTupleBinaryOperator node)
|
|
{
|
|
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression left = (BoundExpression)Visit(node.Left);
|
|
BoundExpression right = (BoundExpression)Visit(node.Right);
|
|
BoundTupleBinaryOperator boundTupleBinaryOperator;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundTupleBinaryOperator = node.Update(left, right, node.OperatorKind, node.Operators, value.Item2);
|
|
(boundTupleBinaryOperator.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundTupleBinaryOperator = node.Update(left, right, node.OperatorKind, node.Operators, node.Type);
|
|
}
|
|
return boundTupleBinaryOperator;
|
|
}
|
|
|
|
public override BoundNode? VisitCompoundAssignmentOperator(BoundCompoundAssignmentOperator node)
|
|
{
|
|
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
|
|
GetUpdatedArray(node, node.OriginalUserDefinedOperatorsOpt);
|
|
BoundExpression left = (BoundExpression)Visit(node.Left);
|
|
BoundExpression right = (BoundExpression)Visit(node.Right);
|
|
BoundValuePlaceholder leftPlaceholder = node.LeftPlaceholder;
|
|
BoundExpression leftConversion = node.LeftConversion;
|
|
BoundValuePlaceholder finalPlaceholder = node.FinalPlaceholder;
|
|
BoundExpression finalConversion = node.FinalConversion;
|
|
BoundCompoundAssignmentOperator boundCompoundAssignmentOperator;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundCompoundAssignmentOperator = node.Update(node.Operator, left, right, leftPlaceholder, leftConversion, finalPlaceholder, finalConversion, node.ResultKind, node.OriginalUserDefinedOperatorsOpt, value.Item2);
|
|
(boundCompoundAssignmentOperator.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundCompoundAssignmentOperator = node.Update(node.Operator, left, right, leftPlaceholder, leftConversion, finalPlaceholder, finalConversion, node.ResultKind, node.OriginalUserDefinedOperatorsOpt, node.Type);
|
|
}
|
|
return boundCompoundAssignmentOperator;
|
|
}
|
|
|
|
public override BoundNode? VisitAssignmentOperator(BoundAssignmentOperator node)
|
|
{
|
|
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression left = (BoundExpression)Visit(node.Left);
|
|
BoundExpression right = (BoundExpression)Visit(node.Right);
|
|
BoundAssignmentOperator boundAssignmentOperator;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundAssignmentOperator = node.Update(left, right, node.IsRef, value.Item2);
|
|
(boundAssignmentOperator.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundAssignmentOperator = node.Update(left, right, node.IsRef, node.Type);
|
|
}
|
|
return boundAssignmentOperator;
|
|
}
|
|
|
|
public override BoundNode? VisitDeconstructionAssignmentOperator(BoundDeconstructionAssignmentOperator node)
|
|
{
|
|
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundTupleExpression left = (BoundTupleExpression)Visit(node.Left);
|
|
BoundConversion right = (BoundConversion)Visit(node.Right);
|
|
BoundDeconstructionAssignmentOperator boundDeconstructionAssignmentOperator;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundDeconstructionAssignmentOperator = node.Update(left, right, node.IsUsed, value.Item2);
|
|
(boundDeconstructionAssignmentOperator.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundDeconstructionAssignmentOperator = node.Update(left, right, node.IsUsed, node.Type);
|
|
}
|
|
return boundDeconstructionAssignmentOperator;
|
|
}
|
|
|
|
public override BoundNode? VisitNullCoalescingOperator(BoundNullCoalescingOperator node)
|
|
{
|
|
//IL_0065: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression leftOperand = (BoundExpression)Visit(node.LeftOperand);
|
|
BoundExpression rightOperand = (BoundExpression)Visit(node.RightOperand);
|
|
BoundValuePlaceholder leftPlaceholder = node.LeftPlaceholder;
|
|
BoundExpression leftConversion = node.LeftConversion;
|
|
BoundNullCoalescingOperator boundNullCoalescingOperator;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundNullCoalescingOperator = node.Update(leftOperand, rightOperand, leftPlaceholder, leftConversion, node.OperatorResultKind, node.Checked, value.Item2);
|
|
(boundNullCoalescingOperator.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundNullCoalescingOperator = node.Update(leftOperand, rightOperand, leftPlaceholder, leftConversion, node.OperatorResultKind, node.Checked, node.Type);
|
|
}
|
|
return boundNullCoalescingOperator;
|
|
}
|
|
|
|
public override BoundNode? VisitNullCoalescingAssignmentOperator(BoundNullCoalescingAssignmentOperator node)
|
|
{
|
|
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression leftOperand = (BoundExpression)Visit(node.LeftOperand);
|
|
BoundExpression rightOperand = (BoundExpression)Visit(node.RightOperand);
|
|
BoundNullCoalescingAssignmentOperator boundNullCoalescingAssignmentOperator;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundNullCoalescingAssignmentOperator = node.Update(leftOperand, rightOperand, value.Item2);
|
|
(boundNullCoalescingAssignmentOperator.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundNullCoalescingAssignmentOperator = node.Update(leftOperand, rightOperand, node.Type);
|
|
}
|
|
return boundNullCoalescingAssignmentOperator;
|
|
}
|
|
|
|
public override BoundNode? VisitUnconvertedConditionalOperator(BoundUnconvertedConditionalOperator node)
|
|
{
|
|
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression condition = (BoundExpression)Visit(node.Condition);
|
|
BoundExpression consequence = (BoundExpression)Visit(node.Consequence);
|
|
BoundExpression alternative = (BoundExpression)Visit(node.Alternative);
|
|
BoundUnconvertedConditionalOperator boundUnconvertedConditionalOperator;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundUnconvertedConditionalOperator = node.Update(condition, consequence, alternative, node.ConstantValueOpt, node.NoCommonTypeError);
|
|
(boundUnconvertedConditionalOperator.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundUnconvertedConditionalOperator = node.Update(condition, consequence, alternative, node.ConstantValueOpt, node.NoCommonTypeError);
|
|
}
|
|
return boundUnconvertedConditionalOperator;
|
|
}
|
|
|
|
public override BoundNode? VisitConditionalOperator(BoundConditionalOperator node)
|
|
{
|
|
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
|
|
TypeSymbol updatedSymbol = GetUpdatedSymbol(node, node.NaturalTypeOpt);
|
|
BoundExpression condition = (BoundExpression)Visit(node.Condition);
|
|
BoundExpression consequence = (BoundExpression)Visit(node.Consequence);
|
|
BoundExpression alternative = (BoundExpression)Visit(node.Alternative);
|
|
BoundConditionalOperator boundConditionalOperator;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundConditionalOperator = node.Update(node.IsRef, condition, consequence, alternative, node.ConstantValueOpt, updatedSymbol, node.WasTargetTyped, value.Item2);
|
|
(boundConditionalOperator.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundConditionalOperator = node.Update(node.IsRef, condition, consequence, alternative, node.ConstantValueOpt, updatedSymbol, node.WasTargetTyped, node.Type);
|
|
}
|
|
return boundConditionalOperator;
|
|
}
|
|
|
|
public override BoundNode? VisitArrayAccess(BoundArrayAccess node)
|
|
{
|
|
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression expression = (BoundExpression)Visit(node.Expression);
|
|
ImmutableArray<BoundExpression> indices = VisitList(node.Indices);
|
|
BoundArrayAccess boundArrayAccess;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundArrayAccess = node.Update(expression, indices, value.Item2);
|
|
(boundArrayAccess.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundArrayAccess = node.Update(expression, indices, node.Type);
|
|
}
|
|
return boundArrayAccess;
|
|
}
|
|
|
|
public override BoundNode? VisitArrayLength(BoundArrayLength node)
|
|
{
|
|
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression expression = (BoundExpression)Visit(node.Expression);
|
|
BoundArrayLength boundArrayLength;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundArrayLength = node.Update(expression, value.Item2);
|
|
(boundArrayLength.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundArrayLength = node.Update(expression, node.Type);
|
|
}
|
|
return boundArrayLength;
|
|
}
|
|
|
|
public override BoundNode? VisitAwaitableInfo(BoundAwaitableInfo node)
|
|
{
|
|
PropertySymbol updatedSymbol = GetUpdatedSymbol(node, node.IsCompleted);
|
|
MethodSymbol updatedSymbol2 = GetUpdatedSymbol(node, node.GetResult);
|
|
BoundAwaitableValuePlaceholder awaitableInstancePlaceholder = (BoundAwaitableValuePlaceholder)Visit(node.AwaitableInstancePlaceholder);
|
|
BoundExpression getAwaiter = (BoundExpression)Visit(node.GetAwaiter);
|
|
return node.Update(awaitableInstancePlaceholder, node.IsDynamic, getAwaiter, updatedSymbol, updatedSymbol2);
|
|
}
|
|
|
|
public override BoundNode? VisitAwaitExpression(BoundAwaitExpression node)
|
|
{
|
|
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression expression = (BoundExpression)Visit(node.Expression);
|
|
BoundAwaitableInfo awaitableInfo = (BoundAwaitableInfo)Visit(node.AwaitableInfo);
|
|
BoundAwaitExpression boundAwaitExpression;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundAwaitExpression = node.Update(expression, awaitableInfo, node.DebugInfo, value.Item2);
|
|
(boundAwaitExpression.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundAwaitExpression = node.Update(expression, awaitableInfo, node.DebugInfo, node.Type);
|
|
}
|
|
return boundAwaitExpression;
|
|
}
|
|
|
|
public override BoundNode? VisitTypeOfOperator(BoundTypeOfOperator node)
|
|
{
|
|
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
|
|
MethodSymbol updatedSymbol = GetUpdatedSymbol(node, node.GetTypeFromHandle);
|
|
BoundTypeExpression sourceType = (BoundTypeExpression)Visit(node.SourceType);
|
|
BoundTypeOfOperator boundTypeOfOperator;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundTypeOfOperator = node.Update(sourceType, updatedSymbol, value.Item2);
|
|
(boundTypeOfOperator.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundTypeOfOperator = node.Update(sourceType, updatedSymbol, node.Type);
|
|
}
|
|
return boundTypeOfOperator;
|
|
}
|
|
|
|
public override BoundNode? VisitBlockInstrumentation(BoundBlockInstrumentation node)
|
|
{
|
|
LocalSymbol updatedSymbol = GetUpdatedSymbol(node, node.Local);
|
|
BoundStatement prologue = (BoundStatement)Visit(node.Prologue);
|
|
BoundStatement epilogue = (BoundStatement)Visit(node.Epilogue);
|
|
return node.Update(updatedSymbol, prologue, epilogue);
|
|
}
|
|
|
|
public override BoundNode? VisitMethodDefIndex(BoundMethodDefIndex node)
|
|
{
|
|
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
|
|
MethodSymbol updatedSymbol = GetUpdatedSymbol(node, node.Method);
|
|
BoundMethodDefIndex boundMethodDefIndex;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundMethodDefIndex = node.Update(updatedSymbol, value.Item2);
|
|
(boundMethodDefIndex.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundMethodDefIndex = node.Update(updatedSymbol, node.Type);
|
|
}
|
|
return boundMethodDefIndex;
|
|
}
|
|
|
|
public override BoundNode? VisitLocalId(BoundLocalId node)
|
|
{
|
|
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
|
|
LocalSymbol updatedSymbol = GetUpdatedSymbol(node, node.Local);
|
|
FieldSymbol updatedSymbol2 = GetUpdatedSymbol(node, node.HoistedField);
|
|
BoundLocalId boundLocalId;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundLocalId = node.Update(updatedSymbol, updatedSymbol2, value.Item2);
|
|
(boundLocalId.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundLocalId = node.Update(updatedSymbol, updatedSymbol2, node.Type);
|
|
}
|
|
return boundLocalId;
|
|
}
|
|
|
|
public override BoundNode? VisitParameterId(BoundParameterId node)
|
|
{
|
|
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
|
|
ParameterSymbol updatedSymbol = GetUpdatedSymbol(node, node.Parameter);
|
|
FieldSymbol updatedSymbol2 = GetUpdatedSymbol(node, node.HoistedField);
|
|
BoundParameterId boundParameterId;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundParameterId = node.Update(updatedSymbol, updatedSymbol2, value.Item2);
|
|
(boundParameterId.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundParameterId = node.Update(updatedSymbol, updatedSymbol2, node.Type);
|
|
}
|
|
return boundParameterId;
|
|
}
|
|
|
|
public override BoundNode? VisitStateMachineInstanceId(BoundStateMachineInstanceId node)
|
|
{
|
|
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundStateMachineInstanceId boundStateMachineInstanceId = node.Update(value.Item2);
|
|
(boundStateMachineInstanceId.TopLevelNullability, _) = value;
|
|
return boundStateMachineInstanceId;
|
|
}
|
|
|
|
public override BoundNode? VisitMaximumMethodDefIndex(BoundMaximumMethodDefIndex node)
|
|
{
|
|
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundMaximumMethodDefIndex boundMaximumMethodDefIndex = node.Update(value.Item2);
|
|
(boundMaximumMethodDefIndex.TopLevelNullability, _) = value;
|
|
return boundMaximumMethodDefIndex;
|
|
}
|
|
|
|
public override BoundNode? VisitInstrumentationPayloadRoot(BoundInstrumentationPayloadRoot node)
|
|
{
|
|
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundInstrumentationPayloadRoot boundInstrumentationPayloadRoot = node.Update(node.AnalysisKind, value.Item2);
|
|
(boundInstrumentationPayloadRoot.TopLevelNullability, _) = value;
|
|
return boundInstrumentationPayloadRoot;
|
|
}
|
|
|
|
public override BoundNode? VisitModuleVersionId(BoundModuleVersionId node)
|
|
{
|
|
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundModuleVersionId boundModuleVersionId = node.Update(value.Item2);
|
|
(boundModuleVersionId.TopLevelNullability, _) = value;
|
|
return boundModuleVersionId;
|
|
}
|
|
|
|
public override BoundNode? VisitModuleVersionIdString(BoundModuleVersionIdString node)
|
|
{
|
|
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundModuleVersionIdString boundModuleVersionIdString = node.Update(value.Item2);
|
|
(boundModuleVersionIdString.TopLevelNullability, _) = value;
|
|
return boundModuleVersionIdString;
|
|
}
|
|
|
|
public override BoundNode? VisitSourceDocumentIndex(BoundSourceDocumentIndex node)
|
|
{
|
|
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundSourceDocumentIndex boundSourceDocumentIndex = node.Update(node.Document, value.Item2);
|
|
(boundSourceDocumentIndex.TopLevelNullability, _) = value;
|
|
return boundSourceDocumentIndex;
|
|
}
|
|
|
|
public override BoundNode? VisitMethodInfo(BoundMethodInfo node)
|
|
{
|
|
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
|
|
MethodSymbol updatedSymbol = GetUpdatedSymbol(node, node.Method);
|
|
MethodSymbol updatedSymbol2 = GetUpdatedSymbol(node, node.GetMethodFromHandle);
|
|
BoundMethodInfo boundMethodInfo;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundMethodInfo = node.Update(updatedSymbol, updatedSymbol2, value.Item2);
|
|
(boundMethodInfo.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundMethodInfo = node.Update(updatedSymbol, updatedSymbol2, node.Type);
|
|
}
|
|
return boundMethodInfo;
|
|
}
|
|
|
|
public override BoundNode? VisitFieldInfo(BoundFieldInfo node)
|
|
{
|
|
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
|
|
FieldSymbol updatedSymbol = GetUpdatedSymbol(node, node.Field);
|
|
MethodSymbol updatedSymbol2 = GetUpdatedSymbol(node, node.GetFieldFromHandle);
|
|
BoundFieldInfo boundFieldInfo;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundFieldInfo = node.Update(updatedSymbol, updatedSymbol2, value.Item2);
|
|
(boundFieldInfo.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundFieldInfo = node.Update(updatedSymbol, updatedSymbol2, node.Type);
|
|
}
|
|
return boundFieldInfo;
|
|
}
|
|
|
|
public override BoundNode? VisitDefaultLiteral(BoundDefaultLiteral node)
|
|
{
|
|
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundDefaultLiteral boundDefaultLiteral = node.Update();
|
|
(boundDefaultLiteral.TopLevelNullability, _) = value;
|
|
return boundDefaultLiteral;
|
|
}
|
|
|
|
public override BoundNode? VisitDefaultExpression(BoundDefaultExpression node)
|
|
{
|
|
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundTypeExpression targetType = node.TargetType;
|
|
BoundDefaultExpression boundDefaultExpression;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundDefaultExpression = node.Update(targetType, node.ConstantValueOpt, value.Item2);
|
|
(boundDefaultExpression.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundDefaultExpression = node.Update(targetType, node.ConstantValueOpt, node.Type);
|
|
}
|
|
return boundDefaultExpression;
|
|
}
|
|
|
|
public override BoundNode? VisitIsOperator(BoundIsOperator node)
|
|
{
|
|
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression operand = (BoundExpression)Visit(node.Operand);
|
|
BoundTypeExpression targetType = (BoundTypeExpression)Visit(node.TargetType);
|
|
BoundIsOperator boundIsOperator;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundIsOperator = node.Update(operand, targetType, node.ConversionKind, value.Item2);
|
|
(boundIsOperator.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundIsOperator = node.Update(operand, targetType, node.ConversionKind, node.Type);
|
|
}
|
|
return boundIsOperator;
|
|
}
|
|
|
|
public override BoundNode? VisitAsOperator(BoundAsOperator node)
|
|
{
|
|
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression operand = (BoundExpression)Visit(node.Operand);
|
|
BoundTypeExpression targetType = (BoundTypeExpression)Visit(node.TargetType);
|
|
BoundValuePlaceholder operandPlaceholder = node.OperandPlaceholder;
|
|
BoundExpression operandConversion = node.OperandConversion;
|
|
BoundAsOperator boundAsOperator;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundAsOperator = node.Update(operand, targetType, operandPlaceholder, operandConversion, value.Item2);
|
|
(boundAsOperator.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundAsOperator = node.Update(operand, targetType, operandPlaceholder, operandConversion, node.Type);
|
|
}
|
|
return boundAsOperator;
|
|
}
|
|
|
|
public override BoundNode? VisitSizeOfOperator(BoundSizeOfOperator node)
|
|
{
|
|
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundTypeExpression sourceType = (BoundTypeExpression)Visit(node.SourceType);
|
|
BoundSizeOfOperator boundSizeOfOperator;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundSizeOfOperator = node.Update(sourceType, node.ConstantValueOpt, value.Item2);
|
|
(boundSizeOfOperator.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundSizeOfOperator = node.Update(sourceType, node.ConstantValueOpt, node.Type);
|
|
}
|
|
return boundSizeOfOperator;
|
|
}
|
|
|
|
public override BoundNode? VisitConversion(BoundConversion node)
|
|
{
|
|
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
|
|
GetUpdatedArray(node, node.OriginalUserDefinedConversionsOpt);
|
|
BoundExpression operand = (BoundExpression)Visit(node.Operand);
|
|
BoundConversion boundConversion;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundConversion = node.Update(operand, node.Conversion, node.IsBaseConversion, node.Checked, node.ExplicitCastInCode, node.ConstantValueOpt, node.ConversionGroupOpt, node.OriginalUserDefinedConversionsOpt, value.Item2);
|
|
(boundConversion.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundConversion = node.Update(operand, node.Conversion, node.IsBaseConversion, node.Checked, node.ExplicitCastInCode, node.ConstantValueOpt, node.ConversionGroupOpt, node.OriginalUserDefinedConversionsOpt, node.Type);
|
|
}
|
|
return boundConversion;
|
|
}
|
|
|
|
public override BoundNode? VisitReadOnlySpanFromArray(BoundReadOnlySpanFromArray node)
|
|
{
|
|
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
|
|
MethodSymbol updatedSymbol = GetUpdatedSymbol(node, node.ConversionMethod);
|
|
BoundExpression operand = (BoundExpression)Visit(node.Operand);
|
|
BoundReadOnlySpanFromArray boundReadOnlySpanFromArray;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundReadOnlySpanFromArray = node.Update(operand, updatedSymbol, value.Item2);
|
|
(boundReadOnlySpanFromArray.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundReadOnlySpanFromArray = node.Update(operand, updatedSymbol, node.Type);
|
|
}
|
|
return boundReadOnlySpanFromArray;
|
|
}
|
|
|
|
public override BoundNode? VisitArgList(BoundArgList node)
|
|
{
|
|
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundArgList boundArgList = node.Update(value.Item2);
|
|
(boundArgList.TopLevelNullability, _) = value;
|
|
return boundArgList;
|
|
}
|
|
|
|
public override BoundNode? VisitArgListOperator(BoundArgListOperator node)
|
|
{
|
|
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
|
|
ImmutableArray<BoundExpression> arguments = VisitList(node.Arguments);
|
|
BoundArgListOperator boundArgListOperator;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundArgListOperator = node.Update(arguments, node.ArgumentRefKindsOpt, value.Item2);
|
|
(boundArgListOperator.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundArgListOperator = node.Update(arguments, node.ArgumentRefKindsOpt, node.Type);
|
|
}
|
|
return boundArgListOperator;
|
|
}
|
|
|
|
public override BoundNode? VisitFixedLocalCollectionInitializer(BoundFixedLocalCollectionInitializer node)
|
|
{
|
|
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
|
|
TypeSymbol updatedSymbol = GetUpdatedSymbol(node, node.ElementPointerType);
|
|
MethodSymbol updatedSymbol2 = GetUpdatedSymbol(node, node.GetPinnableOpt);
|
|
BoundValuePlaceholder elementPointerPlaceholder = node.ElementPointerPlaceholder;
|
|
BoundExpression elementPointerConversion = node.ElementPointerConversion;
|
|
BoundExpression expression = (BoundExpression)Visit(node.Expression);
|
|
BoundFixedLocalCollectionInitializer boundFixedLocalCollectionInitializer;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundFixedLocalCollectionInitializer = node.Update(updatedSymbol, elementPointerPlaceholder, elementPointerConversion, expression, updatedSymbol2, value.Item2);
|
|
(boundFixedLocalCollectionInitializer.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundFixedLocalCollectionInitializer = node.Update(updatedSymbol, elementPointerPlaceholder, elementPointerConversion, expression, updatedSymbol2, node.Type);
|
|
}
|
|
return boundFixedLocalCollectionInitializer;
|
|
}
|
|
|
|
public override BoundNode? VisitBlock(BoundBlock node)
|
|
{
|
|
ImmutableArray<LocalSymbol> updatedArray = GetUpdatedArray(node, node.Locals);
|
|
ImmutableArray<LocalFunctionSymbol> updatedArray2 = GetUpdatedArray(node, node.LocalFunctions);
|
|
BoundBlockInstrumentation instrumentation = (BoundBlockInstrumentation)Visit(node.Instrumentation);
|
|
ImmutableArray<BoundStatement> statements = VisitList(node.Statements);
|
|
return node.Update(updatedArray, updatedArray2, node.HasUnsafeModifier, instrumentation, statements);
|
|
}
|
|
|
|
public override BoundNode? VisitScope(BoundScope node)
|
|
{
|
|
ImmutableArray<LocalSymbol> updatedArray = GetUpdatedArray(node, node.Locals);
|
|
ImmutableArray<BoundStatement> statements = VisitList(node.Statements);
|
|
return node.Update(updatedArray, statements);
|
|
}
|
|
|
|
public override BoundNode? VisitStateMachineScope(BoundStateMachineScope node)
|
|
{
|
|
ImmutableArray<StateMachineFieldSymbol> updatedArray = GetUpdatedArray(node, node.Fields);
|
|
BoundStatement statement = (BoundStatement)Visit(node.Statement);
|
|
return node.Update(updatedArray, statement);
|
|
}
|
|
|
|
public override BoundNode? VisitLocalDeclaration(BoundLocalDeclaration node)
|
|
{
|
|
LocalSymbol updatedSymbol = GetUpdatedSymbol(node, node.LocalSymbol);
|
|
BoundTypeExpression declaredTypeOpt = (BoundTypeExpression)Visit(node.DeclaredTypeOpt);
|
|
BoundExpression initializerOpt = (BoundExpression)Visit(node.InitializerOpt);
|
|
ImmutableArray<BoundExpression> argumentsOpt = VisitList(node.ArgumentsOpt);
|
|
return node.Update(updatedSymbol, declaredTypeOpt, initializerOpt, argumentsOpt, node.InferredType);
|
|
}
|
|
|
|
public override BoundNode? VisitLocalFunctionStatement(BoundLocalFunctionStatement node)
|
|
{
|
|
LocalFunctionSymbol updatedSymbol = GetUpdatedSymbol(node, node.Symbol);
|
|
BoundBlock blockBody = (BoundBlock)Visit(node.BlockBody);
|
|
BoundBlock expressionBody = (BoundBlock)Visit(node.ExpressionBody);
|
|
return node.Update(updatedSymbol, blockBody, expressionBody);
|
|
}
|
|
|
|
public override BoundNode? VisitSwitchStatement(BoundSwitchStatement node)
|
|
{
|
|
ImmutableArray<LocalSymbol> updatedArray = GetUpdatedArray(node, node.InnerLocals);
|
|
ImmutableArray<LocalFunctionSymbol> updatedArray2 = GetUpdatedArray(node, node.InnerLocalFunctions);
|
|
BoundExpression expression = (BoundExpression)Visit(node.Expression);
|
|
ImmutableArray<BoundSwitchSection> switchSections = VisitList(node.SwitchSections);
|
|
BoundDecisionDag reachabilityDecisionDag = node.ReachabilityDecisionDag;
|
|
BoundSwitchLabel defaultLabel = (BoundSwitchLabel)Visit(node.DefaultLabel);
|
|
return node.Update(expression, updatedArray, updatedArray2, switchSections, reachabilityDecisionDag, defaultLabel, node.BreakLabel);
|
|
}
|
|
|
|
public override BoundNode? VisitDoStatement(BoundDoStatement node)
|
|
{
|
|
ImmutableArray<LocalSymbol> updatedArray = GetUpdatedArray(node, node.Locals);
|
|
BoundExpression condition = (BoundExpression)Visit(node.Condition);
|
|
BoundStatement body = (BoundStatement)Visit(node.Body);
|
|
return node.Update(updatedArray, condition, body, node.BreakLabel, node.ContinueLabel);
|
|
}
|
|
|
|
public override BoundNode? VisitWhileStatement(BoundWhileStatement node)
|
|
{
|
|
ImmutableArray<LocalSymbol> updatedArray = GetUpdatedArray(node, node.Locals);
|
|
BoundExpression condition = (BoundExpression)Visit(node.Condition);
|
|
BoundStatement body = (BoundStatement)Visit(node.Body);
|
|
return node.Update(updatedArray, condition, body, node.BreakLabel, node.ContinueLabel);
|
|
}
|
|
|
|
public override BoundNode? VisitForStatement(BoundForStatement node)
|
|
{
|
|
ImmutableArray<LocalSymbol> updatedArray = GetUpdatedArray(node, node.OuterLocals);
|
|
ImmutableArray<LocalSymbol> updatedArray2 = GetUpdatedArray(node, node.InnerLocals);
|
|
BoundStatement initializer = (BoundStatement)Visit(node.Initializer);
|
|
BoundExpression condition = (BoundExpression)Visit(node.Condition);
|
|
BoundStatement increment = (BoundStatement)Visit(node.Increment);
|
|
BoundStatement body = (BoundStatement)Visit(node.Body);
|
|
return node.Update(updatedArray, initializer, updatedArray2, condition, increment, body, node.BreakLabel, node.ContinueLabel);
|
|
}
|
|
|
|
public override BoundNode? VisitForEachStatement(BoundForEachStatement node)
|
|
{
|
|
ImmutableArray<LocalSymbol> updatedArray = GetUpdatedArray(node, node.IterationVariables);
|
|
BoundValuePlaceholder elementPlaceholder = node.ElementPlaceholder;
|
|
BoundExpression elementConversion = node.ElementConversion;
|
|
BoundTypeExpression iterationVariableType = (BoundTypeExpression)Visit(node.IterationVariableType);
|
|
BoundExpression iterationErrorExpressionOpt = (BoundExpression)Visit(node.IterationErrorExpressionOpt);
|
|
BoundExpression expression = (BoundExpression)Visit(node.Expression);
|
|
BoundForEachDeconstructStep deconstructionOpt = (BoundForEachDeconstructStep)Visit(node.DeconstructionOpt);
|
|
BoundAwaitableInfo awaitOpt = (BoundAwaitableInfo)Visit(node.AwaitOpt);
|
|
BoundStatement body = (BoundStatement)Visit(node.Body);
|
|
return node.Update(node.EnumeratorInfoOpt, elementPlaceholder, elementConversion, iterationVariableType, updatedArray, iterationErrorExpressionOpt, expression, deconstructionOpt, awaitOpt, body, node.BreakLabel, node.ContinueLabel);
|
|
}
|
|
|
|
public override BoundNode? VisitUsingStatement(BoundUsingStatement node)
|
|
{
|
|
ImmutableArray<LocalSymbol> updatedArray = GetUpdatedArray(node, node.Locals);
|
|
BoundMultipleLocalDeclarations declarationsOpt = (BoundMultipleLocalDeclarations)Visit(node.DeclarationsOpt);
|
|
BoundExpression expressionOpt = (BoundExpression)Visit(node.ExpressionOpt);
|
|
BoundStatement body = (BoundStatement)Visit(node.Body);
|
|
BoundAwaitableInfo awaitOpt = (BoundAwaitableInfo)Visit(node.AwaitOpt);
|
|
return node.Update(updatedArray, declarationsOpt, expressionOpt, body, awaitOpt, node.PatternDisposeInfoOpt);
|
|
}
|
|
|
|
public override BoundNode? VisitFixedStatement(BoundFixedStatement node)
|
|
{
|
|
ImmutableArray<LocalSymbol> updatedArray = GetUpdatedArray(node, node.Locals);
|
|
BoundMultipleLocalDeclarations declarations = (BoundMultipleLocalDeclarations)Visit(node.Declarations);
|
|
BoundStatement body = (BoundStatement)Visit(node.Body);
|
|
return node.Update(updatedArray, declarations, body);
|
|
}
|
|
|
|
public override BoundNode? VisitCatchBlock(BoundCatchBlock node)
|
|
{
|
|
ImmutableArray<LocalSymbol> updatedArray = GetUpdatedArray(node, node.Locals);
|
|
TypeSymbol updatedSymbol = GetUpdatedSymbol(node, node.ExceptionTypeOpt);
|
|
BoundExpression exceptionSourceOpt = (BoundExpression)Visit(node.ExceptionSourceOpt);
|
|
BoundStatementList exceptionFilterPrologueOpt = (BoundStatementList)Visit(node.ExceptionFilterPrologueOpt);
|
|
BoundExpression exceptionFilterOpt = (BoundExpression)Visit(node.ExceptionFilterOpt);
|
|
BoundBlock body = (BoundBlock)Visit(node.Body);
|
|
return node.Update(updatedArray, exceptionSourceOpt, updatedSymbol, exceptionFilterPrologueOpt, exceptionFilterOpt, body, node.IsSynthesizedAsyncCatchAll);
|
|
}
|
|
|
|
public override BoundNode? VisitLiteral(BoundLiteral node)
|
|
{
|
|
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundLiteral boundLiteral = node.Update(node.ConstantValueOpt, value.Item2);
|
|
(boundLiteral.TopLevelNullability, _) = value;
|
|
return boundLiteral;
|
|
}
|
|
|
|
public override BoundNode? VisitUtf8String(BoundUtf8String node)
|
|
{
|
|
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundUtf8String boundUtf8String = node.Update(node.Value, value.Item2);
|
|
(boundUtf8String.TopLevelNullability, _) = value;
|
|
return boundUtf8String;
|
|
}
|
|
|
|
public override BoundNode? VisitThisReference(BoundThisReference node)
|
|
{
|
|
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundThisReference boundThisReference = node.Update(value.Item2);
|
|
(boundThisReference.TopLevelNullability, _) = value;
|
|
return boundThisReference;
|
|
}
|
|
|
|
public override BoundNode? VisitPreviousSubmissionReference(BoundPreviousSubmissionReference node)
|
|
{
|
|
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundPreviousSubmissionReference boundPreviousSubmissionReference = node.Update(value.Item2);
|
|
(boundPreviousSubmissionReference.TopLevelNullability, _) = value;
|
|
return boundPreviousSubmissionReference;
|
|
}
|
|
|
|
public override BoundNode? VisitHostObjectMemberReference(BoundHostObjectMemberReference node)
|
|
{
|
|
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundHostObjectMemberReference boundHostObjectMemberReference = node.Update(value.Item2);
|
|
(boundHostObjectMemberReference.TopLevelNullability, _) = value;
|
|
return boundHostObjectMemberReference;
|
|
}
|
|
|
|
public override BoundNode? VisitBaseReference(BoundBaseReference node)
|
|
{
|
|
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundBaseReference boundBaseReference = node.Update(value.Item2);
|
|
(boundBaseReference.TopLevelNullability, _) = value;
|
|
return boundBaseReference;
|
|
}
|
|
|
|
public override BoundNode? VisitLocal(BoundLocal node)
|
|
{
|
|
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
|
|
LocalSymbol updatedSymbol = GetUpdatedSymbol(node, node.LocalSymbol);
|
|
BoundLocal boundLocal;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundLocal = node.Update(updatedSymbol, node.DeclarationKind, node.ConstantValueOpt, node.IsNullableUnknown, value.Item2);
|
|
(boundLocal.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundLocal = node.Update(updatedSymbol, node.DeclarationKind, node.ConstantValueOpt, node.IsNullableUnknown, node.Type);
|
|
}
|
|
return boundLocal;
|
|
}
|
|
|
|
public override BoundNode? VisitPseudoVariable(BoundPseudoVariable node)
|
|
{
|
|
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
|
|
LocalSymbol updatedSymbol = GetUpdatedSymbol(node, node.LocalSymbol);
|
|
BoundPseudoVariable boundPseudoVariable;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundPseudoVariable = node.Update(updatedSymbol, node.EmitExpressions, value.Item2);
|
|
(boundPseudoVariable.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundPseudoVariable = node.Update(updatedSymbol, node.EmitExpressions, node.Type);
|
|
}
|
|
return boundPseudoVariable;
|
|
}
|
|
|
|
public override BoundNode? VisitRangeVariable(BoundRangeVariable node)
|
|
{
|
|
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
|
|
RangeVariableSymbol updatedSymbol = GetUpdatedSymbol(node, node.RangeVariableSymbol);
|
|
BoundExpression value = (BoundExpression)Visit(node.Value);
|
|
BoundRangeVariable boundRangeVariable;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value2))
|
|
{
|
|
boundRangeVariable = node.Update(updatedSymbol, value, value2.Item2);
|
|
(boundRangeVariable.TopLevelNullability, _) = value2;
|
|
}
|
|
else
|
|
{
|
|
boundRangeVariable = node.Update(updatedSymbol, value, node.Type);
|
|
}
|
|
return boundRangeVariable;
|
|
}
|
|
|
|
public override BoundNode? VisitParameter(BoundParameter node)
|
|
{
|
|
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
|
|
ParameterSymbol updatedSymbol = GetUpdatedSymbol(node, node.ParameterSymbol);
|
|
BoundParameter boundParameter;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundParameter = node.Update(updatedSymbol, value.Item2);
|
|
(boundParameter.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundParameter = node.Update(updatedSymbol, node.Type);
|
|
}
|
|
return boundParameter;
|
|
}
|
|
|
|
public override BoundNode? VisitLabel(BoundLabel node)
|
|
{
|
|
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundLabel boundLabel = node.Update(node.Label, value.Item2);
|
|
(boundLabel.TopLevelNullability, _) = value;
|
|
return boundLabel;
|
|
}
|
|
|
|
public override BoundNode? VisitSwitchExpressionArm(BoundSwitchExpressionArm node)
|
|
{
|
|
ImmutableArray<LocalSymbol> updatedArray = GetUpdatedArray(node, node.Locals);
|
|
BoundPattern pattern = (BoundPattern)Visit(node.Pattern);
|
|
BoundExpression whenClause = (BoundExpression)Visit(node.WhenClause);
|
|
BoundExpression value = (BoundExpression)Visit(node.Value);
|
|
return node.Update(updatedArray, pattern, whenClause, value, node.Label);
|
|
}
|
|
|
|
public override BoundNode? VisitUnconvertedSwitchExpression(BoundUnconvertedSwitchExpression node)
|
|
{
|
|
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression expression = (BoundExpression)Visit(node.Expression);
|
|
ImmutableArray<BoundSwitchExpressionArm> switchArms = VisitList(node.SwitchArms);
|
|
BoundDecisionDag reachabilityDecisionDag = node.ReachabilityDecisionDag;
|
|
BoundUnconvertedSwitchExpression boundUnconvertedSwitchExpression;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundUnconvertedSwitchExpression = node.Update(expression, switchArms, reachabilityDecisionDag, node.DefaultLabel, node.ReportedNotExhaustive, value.Item2);
|
|
(boundUnconvertedSwitchExpression.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundUnconvertedSwitchExpression = node.Update(expression, switchArms, reachabilityDecisionDag, node.DefaultLabel, node.ReportedNotExhaustive, node.Type);
|
|
}
|
|
return boundUnconvertedSwitchExpression;
|
|
}
|
|
|
|
public override BoundNode? VisitConvertedSwitchExpression(BoundConvertedSwitchExpression node)
|
|
{
|
|
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
|
|
TypeSymbol updatedSymbol = GetUpdatedSymbol(node, node.NaturalTypeOpt);
|
|
BoundExpression expression = (BoundExpression)Visit(node.Expression);
|
|
ImmutableArray<BoundSwitchExpressionArm> switchArms = VisitList(node.SwitchArms);
|
|
BoundDecisionDag reachabilityDecisionDag = node.ReachabilityDecisionDag;
|
|
BoundConvertedSwitchExpression boundConvertedSwitchExpression;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundConvertedSwitchExpression = node.Update(updatedSymbol, node.WasTargetTyped, expression, switchArms, reachabilityDecisionDag, node.DefaultLabel, node.ReportedNotExhaustive, value.Item2);
|
|
(boundConvertedSwitchExpression.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundConvertedSwitchExpression = node.Update(updatedSymbol, node.WasTargetTyped, expression, switchArms, reachabilityDecisionDag, node.DefaultLabel, node.ReportedNotExhaustive, node.Type);
|
|
}
|
|
return boundConvertedSwitchExpression;
|
|
}
|
|
|
|
public override BoundNode? VisitDagDeconstructEvaluation(BoundDagDeconstructEvaluation node)
|
|
{
|
|
MethodSymbol updatedSymbol = GetUpdatedSymbol(node, node.DeconstructMethod);
|
|
BoundDagTemp input = (BoundDagTemp)Visit(node.Input);
|
|
return node.Update(updatedSymbol, input);
|
|
}
|
|
|
|
public override BoundNode? VisitDagFieldEvaluation(BoundDagFieldEvaluation node)
|
|
{
|
|
FieldSymbol updatedSymbol = GetUpdatedSymbol(node, node.Field);
|
|
BoundDagTemp input = (BoundDagTemp)Visit(node.Input);
|
|
return node.Update(updatedSymbol, input);
|
|
}
|
|
|
|
public override BoundNode? VisitDagPropertyEvaluation(BoundDagPropertyEvaluation node)
|
|
{
|
|
PropertySymbol updatedSymbol = GetUpdatedSymbol(node, node.Property);
|
|
BoundDagTemp input = (BoundDagTemp)Visit(node.Input);
|
|
return node.Update(updatedSymbol, node.IsLengthOrCount, input);
|
|
}
|
|
|
|
public override BoundNode? VisitDagIndexEvaluation(BoundDagIndexEvaluation node)
|
|
{
|
|
PropertySymbol updatedSymbol = GetUpdatedSymbol(node, node.Property);
|
|
BoundDagTemp input = (BoundDagTemp)Visit(node.Input);
|
|
return node.Update(updatedSymbol, node.Index, input);
|
|
}
|
|
|
|
public override BoundNode? VisitDagIndexerEvaluation(BoundDagIndexerEvaluation node)
|
|
{
|
|
TypeSymbol updatedSymbol = GetUpdatedSymbol(node, node.IndexerType);
|
|
BoundDagTemp lengthTemp = (BoundDagTemp)Visit(node.LengthTemp);
|
|
BoundExpression indexerAccess = (BoundExpression)Visit(node.IndexerAccess);
|
|
BoundListPatternReceiverPlaceholder receiverPlaceholder = (BoundListPatternReceiverPlaceholder)Visit(node.ReceiverPlaceholder);
|
|
BoundListPatternIndexPlaceholder argumentPlaceholder = (BoundListPatternIndexPlaceholder)Visit(node.ArgumentPlaceholder);
|
|
BoundDagTemp input = (BoundDagTemp)Visit(node.Input);
|
|
return node.Update(updatedSymbol, lengthTemp, node.Index, indexerAccess, receiverPlaceholder, argumentPlaceholder, input);
|
|
}
|
|
|
|
public override BoundNode? VisitDagSliceEvaluation(BoundDagSliceEvaluation node)
|
|
{
|
|
TypeSymbol updatedSymbol = GetUpdatedSymbol(node, node.SliceType);
|
|
BoundDagTemp lengthTemp = (BoundDagTemp)Visit(node.LengthTemp);
|
|
BoundExpression indexerAccess = (BoundExpression)Visit(node.IndexerAccess);
|
|
BoundSlicePatternReceiverPlaceholder receiverPlaceholder = (BoundSlicePatternReceiverPlaceholder)Visit(node.ReceiverPlaceholder);
|
|
BoundSlicePatternRangePlaceholder argumentPlaceholder = (BoundSlicePatternRangePlaceholder)Visit(node.ArgumentPlaceholder);
|
|
BoundDagTemp input = (BoundDagTemp)Visit(node.Input);
|
|
return node.Update(updatedSymbol, lengthTemp, node.StartIndex, node.EndIndex, indexerAccess, receiverPlaceholder, argumentPlaceholder, input);
|
|
}
|
|
|
|
public override BoundNode? VisitSwitchSection(BoundSwitchSection node)
|
|
{
|
|
ImmutableArray<LocalSymbol> updatedArray = GetUpdatedArray(node, node.Locals);
|
|
ImmutableArray<BoundSwitchLabel> switchLabels = VisitList(node.SwitchLabels);
|
|
ImmutableArray<BoundStatement> statements = VisitList(node.Statements);
|
|
return node.Update(updatedArray, switchLabels, statements);
|
|
}
|
|
|
|
public override BoundNode? VisitSequencePointExpression(BoundSequencePointExpression node)
|
|
{
|
|
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression expression = (BoundExpression)Visit(node.Expression);
|
|
BoundSequencePointExpression boundSequencePointExpression;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundSequencePointExpression = node.Update(expression, value.Item2);
|
|
(boundSequencePointExpression.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundSequencePointExpression = node.Update(expression, node.Type);
|
|
}
|
|
return boundSequencePointExpression;
|
|
}
|
|
|
|
public override BoundNode? VisitSequence(BoundSequence node)
|
|
{
|
|
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
|
|
ImmutableArray<LocalSymbol> updatedArray = GetUpdatedArray(node, node.Locals);
|
|
ImmutableArray<BoundExpression> sideEffects = VisitList(node.SideEffects);
|
|
BoundExpression value = (BoundExpression)Visit(node.Value);
|
|
BoundSequence boundSequence;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value2))
|
|
{
|
|
boundSequence = node.Update(updatedArray, sideEffects, value, value2.Item2);
|
|
(boundSequence.TopLevelNullability, _) = value2;
|
|
}
|
|
else
|
|
{
|
|
boundSequence = node.Update(updatedArray, sideEffects, value, node.Type);
|
|
}
|
|
return boundSequence;
|
|
}
|
|
|
|
public override BoundNode? VisitSpillSequence(BoundSpillSequence node)
|
|
{
|
|
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
|
|
ImmutableArray<LocalSymbol> updatedArray = GetUpdatedArray(node, node.Locals);
|
|
ImmutableArray<BoundStatement> sideEffects = VisitList(node.SideEffects);
|
|
BoundExpression value = (BoundExpression)Visit(node.Value);
|
|
BoundSpillSequence boundSpillSequence;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value2))
|
|
{
|
|
boundSpillSequence = node.Update(updatedArray, sideEffects, value, value2.Item2);
|
|
(boundSpillSequence.TopLevelNullability, _) = value2;
|
|
}
|
|
else
|
|
{
|
|
boundSpillSequence = node.Update(updatedArray, sideEffects, value, node.Type);
|
|
}
|
|
return boundSpillSequence;
|
|
}
|
|
|
|
public override BoundNode? VisitDynamicMemberAccess(BoundDynamicMemberAccess node)
|
|
{
|
|
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression receiver = (BoundExpression)Visit(node.Receiver);
|
|
BoundDynamicMemberAccess boundDynamicMemberAccess;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundDynamicMemberAccess = node.Update(receiver, node.TypeArgumentsOpt, node.Name, node.Invoked, node.Indexed, value.Item2);
|
|
(boundDynamicMemberAccess.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundDynamicMemberAccess = node.Update(receiver, node.TypeArgumentsOpt, node.Name, node.Invoked, node.Indexed, node.Type);
|
|
}
|
|
return boundDynamicMemberAccess;
|
|
}
|
|
|
|
public override BoundNode? VisitDynamicInvocation(BoundDynamicInvocation node)
|
|
{
|
|
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
|
|
ImmutableArray<MethodSymbol> updatedArray = GetUpdatedArray(node, node.ApplicableMethods);
|
|
BoundExpression expression = (BoundExpression)Visit(node.Expression);
|
|
ImmutableArray<BoundExpression> arguments = VisitList(node.Arguments);
|
|
BoundDynamicInvocation boundDynamicInvocation;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundDynamicInvocation = node.Update(node.ArgumentNamesOpt, node.ArgumentRefKindsOpt, updatedArray, expression, arguments, value.Item2);
|
|
(boundDynamicInvocation.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundDynamicInvocation = node.Update(node.ArgumentNamesOpt, node.ArgumentRefKindsOpt, updatedArray, expression, arguments, node.Type);
|
|
}
|
|
return boundDynamicInvocation;
|
|
}
|
|
|
|
public override BoundNode? VisitConditionalAccess(BoundConditionalAccess node)
|
|
{
|
|
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression receiver = (BoundExpression)Visit(node.Receiver);
|
|
BoundExpression accessExpression = (BoundExpression)Visit(node.AccessExpression);
|
|
BoundConditionalAccess boundConditionalAccess;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundConditionalAccess = node.Update(receiver, accessExpression, value.Item2);
|
|
(boundConditionalAccess.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundConditionalAccess = node.Update(receiver, accessExpression, node.Type);
|
|
}
|
|
return boundConditionalAccess;
|
|
}
|
|
|
|
public override BoundNode? VisitLoweredConditionalAccess(BoundLoweredConditionalAccess node)
|
|
{
|
|
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
|
|
MethodSymbol updatedSymbol = GetUpdatedSymbol(node, node.HasValueMethodOpt);
|
|
BoundExpression receiver = (BoundExpression)Visit(node.Receiver);
|
|
BoundExpression whenNotNull = (BoundExpression)Visit(node.WhenNotNull);
|
|
BoundExpression whenNullOpt = (BoundExpression)Visit(node.WhenNullOpt);
|
|
BoundLoweredConditionalAccess boundLoweredConditionalAccess;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundLoweredConditionalAccess = node.Update(receiver, updatedSymbol, whenNotNull, whenNullOpt, node.Id, node.ForceCopyOfNullableValueType, value.Item2);
|
|
(boundLoweredConditionalAccess.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundLoweredConditionalAccess = node.Update(receiver, updatedSymbol, whenNotNull, whenNullOpt, node.Id, node.ForceCopyOfNullableValueType, node.Type);
|
|
}
|
|
return boundLoweredConditionalAccess;
|
|
}
|
|
|
|
public override BoundNode? VisitConditionalReceiver(BoundConditionalReceiver node)
|
|
{
|
|
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundConditionalReceiver boundConditionalReceiver = node.Update(node.Id, value.Item2);
|
|
(boundConditionalReceiver.TopLevelNullability, _) = value;
|
|
return boundConditionalReceiver;
|
|
}
|
|
|
|
public override BoundNode? VisitComplexConditionalReceiver(BoundComplexConditionalReceiver node)
|
|
{
|
|
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression valueTypeReceiver = (BoundExpression)Visit(node.ValueTypeReceiver);
|
|
BoundExpression referenceTypeReceiver = (BoundExpression)Visit(node.ReferenceTypeReceiver);
|
|
BoundComplexConditionalReceiver boundComplexConditionalReceiver;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundComplexConditionalReceiver = node.Update(valueTypeReceiver, referenceTypeReceiver, value.Item2);
|
|
(boundComplexConditionalReceiver.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundComplexConditionalReceiver = node.Update(valueTypeReceiver, referenceTypeReceiver, node.Type);
|
|
}
|
|
return boundComplexConditionalReceiver;
|
|
}
|
|
|
|
public override BoundNode? VisitMethodGroup(BoundMethodGroup node)
|
|
{
|
|
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
|
|
ImmutableArray<MethodSymbol> updatedArray = GetUpdatedArray(node, node.Methods);
|
|
Symbol updatedSymbol = GetUpdatedSymbol(node, node.LookupSymbolOpt);
|
|
FunctionTypeSymbol updatedSymbol2 = GetUpdatedSymbol(node, node.FunctionType);
|
|
BoundExpression receiverOpt = (BoundExpression)Visit(node.ReceiverOpt);
|
|
BoundMethodGroup boundMethodGroup;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundMethodGroup = node.Update(node.TypeArgumentsOpt, node.Name, updatedArray, updatedSymbol, node.LookupError, node.Flags, updatedSymbol2, receiverOpt, node.ResultKind);
|
|
(boundMethodGroup.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundMethodGroup = node.Update(node.TypeArgumentsOpt, node.Name, updatedArray, updatedSymbol, node.LookupError, node.Flags, updatedSymbol2, receiverOpt, node.ResultKind);
|
|
}
|
|
return boundMethodGroup;
|
|
}
|
|
|
|
public override BoundNode? VisitPropertyGroup(BoundPropertyGroup node)
|
|
{
|
|
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
|
|
ImmutableArray<PropertySymbol> updatedArray = GetUpdatedArray(node, node.Properties);
|
|
BoundExpression receiverOpt = (BoundExpression)Visit(node.ReceiverOpt);
|
|
BoundPropertyGroup boundPropertyGroup;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundPropertyGroup = node.Update(updatedArray, receiverOpt, node.ResultKind);
|
|
(boundPropertyGroup.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundPropertyGroup = node.Update(updatedArray, receiverOpt, node.ResultKind);
|
|
}
|
|
return boundPropertyGroup;
|
|
}
|
|
|
|
public override BoundNode? VisitCall(BoundCall node)
|
|
{
|
|
//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_009b: Unknown result type (might be due to invalid IL or missing references)
|
|
MethodSymbol updatedSymbol = GetUpdatedSymbol(node, node.Method);
|
|
GetUpdatedArray(node, node.OriginalMethodsOpt);
|
|
BoundExpression receiverOpt = (BoundExpression)Visit(node.ReceiverOpt);
|
|
ImmutableArray<BoundExpression> arguments = VisitList(node.Arguments);
|
|
BoundCall boundCall;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundCall = node.Update(receiverOpt, node.InitialBindingReceiverIsSubjectToCloning, updatedSymbol, arguments, node.ArgumentNamesOpt, node.ArgumentRefKindsOpt, node.IsDelegateCall, node.Expanded, node.InvokedAsExtensionMethod, node.ArgsToParamsOpt, node.DefaultArguments, node.ResultKind, node.OriginalMethodsOpt, value.Item2);
|
|
(boundCall.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundCall = node.Update(receiverOpt, node.InitialBindingReceiverIsSubjectToCloning, updatedSymbol, arguments, node.ArgumentNamesOpt, node.ArgumentRefKindsOpt, node.IsDelegateCall, node.Expanded, node.InvokedAsExtensionMethod, node.ArgsToParamsOpt, node.DefaultArguments, node.ResultKind, node.OriginalMethodsOpt, node.Type);
|
|
}
|
|
return boundCall;
|
|
}
|
|
|
|
public override BoundNode? VisitEventAssignmentOperator(BoundEventAssignmentOperator node)
|
|
{
|
|
//IL_0062: Unknown result type (might be due to invalid IL or missing references)
|
|
EventSymbol updatedSymbol = GetUpdatedSymbol(node, node.Event);
|
|
BoundExpression receiverOpt = (BoundExpression)Visit(node.ReceiverOpt);
|
|
BoundExpression argument = (BoundExpression)Visit(node.Argument);
|
|
BoundEventAssignmentOperator boundEventAssignmentOperator;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundEventAssignmentOperator = node.Update(updatedSymbol, node.IsAddition, node.IsDynamic, receiverOpt, argument, value.Item2);
|
|
(boundEventAssignmentOperator.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundEventAssignmentOperator = node.Update(updatedSymbol, node.IsAddition, node.IsDynamic, receiverOpt, argument, node.Type);
|
|
}
|
|
return boundEventAssignmentOperator;
|
|
}
|
|
|
|
public override BoundNode? VisitAttribute(BoundAttribute node)
|
|
{
|
|
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
|
|
MethodSymbol updatedSymbol = GetUpdatedSymbol(node, node.Constructor);
|
|
ImmutableArray<BoundExpression> constructorArguments = VisitList(node.ConstructorArguments);
|
|
ImmutableArray<BoundAssignmentOperator> namedArguments = VisitList(node.NamedArguments);
|
|
BoundAttribute boundAttribute;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundAttribute = node.Update(updatedSymbol, constructorArguments, node.ConstructorArgumentNamesOpt, node.ConstructorArgumentsToParamsOpt, node.ConstructorExpanded, node.ConstructorDefaultArguments, namedArguments, node.ResultKind, value.Item2);
|
|
(boundAttribute.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundAttribute = node.Update(updatedSymbol, constructorArguments, node.ConstructorArgumentNamesOpt, node.ConstructorArgumentsToParamsOpt, node.ConstructorExpanded, node.ConstructorDefaultArguments, namedArguments, node.ResultKind, node.Type);
|
|
}
|
|
return boundAttribute;
|
|
}
|
|
|
|
public override BoundNode? VisitUnconvertedObjectCreationExpression(BoundUnconvertedObjectCreationExpression node)
|
|
{
|
|
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
|
|
ImmutableArray<BoundExpression> arguments = VisitList(node.Arguments);
|
|
BoundUnconvertedObjectCreationExpression boundUnconvertedObjectCreationExpression;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundUnconvertedObjectCreationExpression = node.Update(arguments, node.ArgumentNamesOpt, node.ArgumentRefKindsOpt, node.InitializerOpt, node.Binder);
|
|
(boundUnconvertedObjectCreationExpression.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundUnconvertedObjectCreationExpression = node.Update(arguments, node.ArgumentNamesOpt, node.ArgumentRefKindsOpt, node.InitializerOpt, node.Binder);
|
|
}
|
|
return boundUnconvertedObjectCreationExpression;
|
|
}
|
|
|
|
public override BoundNode? VisitObjectCreationExpression(BoundObjectCreationExpression node)
|
|
{
|
|
//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
|
|
MethodSymbol updatedSymbol = GetUpdatedSymbol(node, node.Constructor);
|
|
ImmutableArray<MethodSymbol> updatedArray = GetUpdatedArray(node, node.ConstructorsGroup);
|
|
ImmutableArray<BoundExpression> arguments = VisitList(node.Arguments);
|
|
BoundObjectInitializerExpressionBase initializerExpressionOpt = (BoundObjectInitializerExpressionBase)Visit(node.InitializerExpressionOpt);
|
|
BoundObjectCreationExpression boundObjectCreationExpression;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundObjectCreationExpression = node.Update(updatedSymbol, updatedArray, arguments, node.ArgumentNamesOpt, node.ArgumentRefKindsOpt, node.Expanded, node.ArgsToParamsOpt, node.DefaultArguments, node.ConstantValueOpt, initializerExpressionOpt, node.WasTargetTyped, value.Item2);
|
|
(boundObjectCreationExpression.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundObjectCreationExpression = node.Update(updatedSymbol, updatedArray, arguments, node.ArgumentNamesOpt, node.ArgumentRefKindsOpt, node.Expanded, node.ArgsToParamsOpt, node.DefaultArguments, node.ConstantValueOpt, initializerExpressionOpt, node.WasTargetTyped, node.Type);
|
|
}
|
|
return boundObjectCreationExpression;
|
|
}
|
|
|
|
public override BoundNode? VisitUnconvertedCollectionExpression(BoundUnconvertedCollectionExpression node)
|
|
{
|
|
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
|
|
ImmutableArray<BoundExpression> elements = VisitList(node.Elements);
|
|
BoundUnconvertedCollectionExpression boundUnconvertedCollectionExpression;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundUnconvertedCollectionExpression = node.Update(elements);
|
|
(boundUnconvertedCollectionExpression.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundUnconvertedCollectionExpression = node.Update(elements);
|
|
}
|
|
return boundUnconvertedCollectionExpression;
|
|
}
|
|
|
|
public override BoundNode? VisitCollectionExpression(BoundCollectionExpression node)
|
|
{
|
|
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
|
|
MethodSymbol updatedSymbol = GetUpdatedSymbol(node, node.CollectionBuilderMethod);
|
|
BoundObjectOrCollectionValuePlaceholder placeholder = node.Placeholder;
|
|
BoundExpression collectionCreation = node.CollectionCreation;
|
|
BoundValuePlaceholder collectionBuilderInvocationPlaceholder = node.CollectionBuilderInvocationPlaceholder;
|
|
BoundExpression collectionBuilderInvocationConversion = node.CollectionBuilderInvocationConversion;
|
|
ImmutableArray<BoundExpression> elements = VisitList(node.Elements);
|
|
BoundCollectionExpression boundCollectionExpression;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundCollectionExpression = node.Update(node.CollectionTypeKind, placeholder, collectionCreation, updatedSymbol, collectionBuilderInvocationPlaceholder, collectionBuilderInvocationConversion, elements, value.Item2);
|
|
(boundCollectionExpression.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundCollectionExpression = node.Update(node.CollectionTypeKind, placeholder, collectionCreation, updatedSymbol, collectionBuilderInvocationPlaceholder, collectionBuilderInvocationConversion, elements, node.Type);
|
|
}
|
|
return boundCollectionExpression;
|
|
}
|
|
|
|
public override BoundNode? VisitCollectionExpressionSpreadExpressionPlaceholder(BoundCollectionExpressionSpreadExpressionPlaceholder node)
|
|
{
|
|
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundCollectionExpressionSpreadExpressionPlaceholder boundCollectionExpressionSpreadExpressionPlaceholder = node.Update(value.Item2);
|
|
(boundCollectionExpressionSpreadExpressionPlaceholder.TopLevelNullability, _) = value;
|
|
return boundCollectionExpressionSpreadExpressionPlaceholder;
|
|
}
|
|
|
|
public override BoundNode? VisitCollectionExpressionSpreadElement(BoundCollectionExpressionSpreadElement node)
|
|
{
|
|
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression expression = (BoundExpression)Visit(node.Expression);
|
|
BoundCollectionExpressionSpreadExpressionPlaceholder expressionPlaceholder = node.ExpressionPlaceholder;
|
|
BoundExpression conversion = node.Conversion;
|
|
BoundExpression lengthOrCount = node.LengthOrCount;
|
|
BoundValuePlaceholder elementPlaceholder = node.ElementPlaceholder;
|
|
BoundStatement iteratorBody = node.IteratorBody;
|
|
BoundCollectionExpressionSpreadElement boundCollectionExpressionSpreadElement;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundCollectionExpressionSpreadElement = node.Update(expression, expressionPlaceholder, conversion, node.EnumeratorInfoOpt, lengthOrCount, elementPlaceholder, iteratorBody);
|
|
(boundCollectionExpressionSpreadElement.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundCollectionExpressionSpreadElement = node.Update(expression, expressionPlaceholder, conversion, node.EnumeratorInfoOpt, lengthOrCount, elementPlaceholder, iteratorBody);
|
|
}
|
|
return boundCollectionExpressionSpreadElement;
|
|
}
|
|
|
|
public override BoundNode? VisitTupleLiteral(BoundTupleLiteral node)
|
|
{
|
|
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
|
|
ImmutableArray<BoundExpression> arguments = VisitList(node.Arguments);
|
|
BoundTupleLiteral boundTupleLiteral;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundTupleLiteral = node.Update(arguments, node.ArgumentNamesOpt, node.InferredNamesOpt, value.Item2);
|
|
(boundTupleLiteral.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundTupleLiteral = node.Update(arguments, node.ArgumentNamesOpt, node.InferredNamesOpt, node.Type);
|
|
}
|
|
return boundTupleLiteral;
|
|
}
|
|
|
|
public override BoundNode? VisitConvertedTupleLiteral(BoundConvertedTupleLiteral node)
|
|
{
|
|
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundTupleLiteral sourceTuple = (BoundTupleLiteral)Visit(node.SourceTuple);
|
|
ImmutableArray<BoundExpression> arguments = VisitList(node.Arguments);
|
|
BoundConvertedTupleLiteral boundConvertedTupleLiteral;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundConvertedTupleLiteral = node.Update(sourceTuple, node.WasTargetTyped, arguments, node.ArgumentNamesOpt, node.InferredNamesOpt, value.Item2);
|
|
(boundConvertedTupleLiteral.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundConvertedTupleLiteral = node.Update(sourceTuple, node.WasTargetTyped, arguments, node.ArgumentNamesOpt, node.InferredNamesOpt, node.Type);
|
|
}
|
|
return boundConvertedTupleLiteral;
|
|
}
|
|
|
|
public override BoundNode? VisitDynamicObjectCreationExpression(BoundDynamicObjectCreationExpression node)
|
|
{
|
|
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
|
|
ImmutableArray<MethodSymbol> updatedArray = GetUpdatedArray(node, node.ApplicableMethods);
|
|
ImmutableArray<BoundExpression> arguments = VisitList(node.Arguments);
|
|
BoundObjectInitializerExpressionBase initializerExpressionOpt = (BoundObjectInitializerExpressionBase)Visit(node.InitializerExpressionOpt);
|
|
BoundDynamicObjectCreationExpression boundDynamicObjectCreationExpression;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundDynamicObjectCreationExpression = node.Update(node.Name, arguments, node.ArgumentNamesOpt, node.ArgumentRefKindsOpt, initializerExpressionOpt, updatedArray, node.WasTargetTyped, value.Item2);
|
|
(boundDynamicObjectCreationExpression.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundDynamicObjectCreationExpression = node.Update(node.Name, arguments, node.ArgumentNamesOpt, node.ArgumentRefKindsOpt, initializerExpressionOpt, updatedArray, node.WasTargetTyped, node.Type);
|
|
}
|
|
return boundDynamicObjectCreationExpression;
|
|
}
|
|
|
|
public override BoundNode? VisitNoPiaObjectCreationExpression(BoundNoPiaObjectCreationExpression node)
|
|
{
|
|
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundObjectInitializerExpressionBase initializerExpressionOpt = (BoundObjectInitializerExpressionBase)Visit(node.InitializerExpressionOpt);
|
|
BoundNoPiaObjectCreationExpression boundNoPiaObjectCreationExpression;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundNoPiaObjectCreationExpression = node.Update(node.GuidString, initializerExpressionOpt, node.WasTargetTyped, value.Item2);
|
|
(boundNoPiaObjectCreationExpression.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundNoPiaObjectCreationExpression = node.Update(node.GuidString, initializerExpressionOpt, node.WasTargetTyped, node.Type);
|
|
}
|
|
return boundNoPiaObjectCreationExpression;
|
|
}
|
|
|
|
public override BoundNode? VisitObjectInitializerExpression(BoundObjectInitializerExpression node)
|
|
{
|
|
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundObjectOrCollectionValuePlaceholder placeholder = (BoundObjectOrCollectionValuePlaceholder)Visit(node.Placeholder);
|
|
ImmutableArray<BoundExpression> initializers = VisitList(node.Initializers);
|
|
BoundObjectInitializerExpression boundObjectInitializerExpression;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundObjectInitializerExpression = node.Update(placeholder, initializers, value.Item2);
|
|
(boundObjectInitializerExpression.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundObjectInitializerExpression = node.Update(placeholder, initializers, node.Type);
|
|
}
|
|
return boundObjectInitializerExpression;
|
|
}
|
|
|
|
public override BoundNode? VisitObjectInitializerMember(BoundObjectInitializerMember node)
|
|
{
|
|
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
|
|
Symbol updatedSymbol = GetUpdatedSymbol(node, node.MemberSymbol);
|
|
TypeSymbol updatedSymbol2 = GetUpdatedSymbol(node, node.ReceiverType);
|
|
ImmutableArray<BoundExpression> arguments = VisitList(node.Arguments);
|
|
BoundObjectInitializerMember boundObjectInitializerMember;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundObjectInitializerMember = node.Update(updatedSymbol, arguments, node.ArgumentNamesOpt, node.ArgumentRefKindsOpt, node.Expanded, node.ArgsToParamsOpt, node.DefaultArguments, node.ResultKind, updatedSymbol2, value.Item2);
|
|
(boundObjectInitializerMember.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundObjectInitializerMember = node.Update(updatedSymbol, arguments, node.ArgumentNamesOpt, node.ArgumentRefKindsOpt, node.Expanded, node.ArgsToParamsOpt, node.DefaultArguments, node.ResultKind, updatedSymbol2, node.Type);
|
|
}
|
|
return boundObjectInitializerMember;
|
|
}
|
|
|
|
public override BoundNode? VisitDynamicObjectInitializerMember(BoundDynamicObjectInitializerMember node)
|
|
{
|
|
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
|
|
TypeSymbol updatedSymbol = GetUpdatedSymbol(node, node.ReceiverType);
|
|
BoundDynamicObjectInitializerMember boundDynamicObjectInitializerMember;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundDynamicObjectInitializerMember = node.Update(node.MemberName, updatedSymbol, value.Item2);
|
|
(boundDynamicObjectInitializerMember.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundDynamicObjectInitializerMember = node.Update(node.MemberName, updatedSymbol, node.Type);
|
|
}
|
|
return boundDynamicObjectInitializerMember;
|
|
}
|
|
|
|
public override BoundNode? VisitCollectionInitializerExpression(BoundCollectionInitializerExpression node)
|
|
{
|
|
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundObjectOrCollectionValuePlaceholder placeholder = (BoundObjectOrCollectionValuePlaceholder)Visit(node.Placeholder);
|
|
ImmutableArray<BoundExpression> initializers = VisitList(node.Initializers);
|
|
BoundCollectionInitializerExpression boundCollectionInitializerExpression;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundCollectionInitializerExpression = node.Update(placeholder, initializers, value.Item2);
|
|
(boundCollectionInitializerExpression.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundCollectionInitializerExpression = node.Update(placeholder, initializers, node.Type);
|
|
}
|
|
return boundCollectionInitializerExpression;
|
|
}
|
|
|
|
public override BoundNode? VisitCollectionElementInitializer(BoundCollectionElementInitializer node)
|
|
{
|
|
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_006f: Unknown result type (might be due to invalid IL or missing references)
|
|
MethodSymbol updatedSymbol = GetUpdatedSymbol(node, node.AddMethod);
|
|
ImmutableArray<BoundExpression> arguments = VisitList(node.Arguments);
|
|
BoundExpression implicitReceiverOpt = (BoundExpression)Visit(node.ImplicitReceiverOpt);
|
|
BoundCollectionElementInitializer boundCollectionElementInitializer;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundCollectionElementInitializer = node.Update(updatedSymbol, arguments, implicitReceiverOpt, node.Expanded, node.ArgsToParamsOpt, node.DefaultArguments, node.InvokedAsExtensionMethod, node.ResultKind, value.Item2);
|
|
(boundCollectionElementInitializer.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundCollectionElementInitializer = node.Update(updatedSymbol, arguments, implicitReceiverOpt, node.Expanded, node.ArgsToParamsOpt, node.DefaultArguments, node.InvokedAsExtensionMethod, node.ResultKind, node.Type);
|
|
}
|
|
return boundCollectionElementInitializer;
|
|
}
|
|
|
|
public override BoundNode? VisitDynamicCollectionElementInitializer(BoundDynamicCollectionElementInitializer node)
|
|
{
|
|
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
|
|
ImmutableArray<MethodSymbol> updatedArray = GetUpdatedArray(node, node.ApplicableMethods);
|
|
BoundExpression expression = (BoundExpression)Visit(node.Expression);
|
|
ImmutableArray<BoundExpression> arguments = VisitList(node.Arguments);
|
|
BoundDynamicCollectionElementInitializer boundDynamicCollectionElementInitializer;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundDynamicCollectionElementInitializer = node.Update(updatedArray, expression, arguments, value.Item2);
|
|
(boundDynamicCollectionElementInitializer.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundDynamicCollectionElementInitializer = node.Update(updatedArray, expression, arguments, node.Type);
|
|
}
|
|
return boundDynamicCollectionElementInitializer;
|
|
}
|
|
|
|
public override BoundNode? VisitImplicitReceiver(BoundImplicitReceiver node)
|
|
{
|
|
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundImplicitReceiver boundImplicitReceiver = node.Update(value.Item2);
|
|
(boundImplicitReceiver.TopLevelNullability, _) = value;
|
|
return boundImplicitReceiver;
|
|
}
|
|
|
|
public override BoundNode? VisitAnonymousObjectCreationExpression(BoundAnonymousObjectCreationExpression node)
|
|
{
|
|
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
|
|
MethodSymbol updatedSymbol = GetUpdatedSymbol(node, node.Constructor);
|
|
ImmutableArray<BoundExpression> arguments = VisitList(node.Arguments);
|
|
ImmutableArray<BoundAnonymousPropertyDeclaration> declarations = VisitList(node.Declarations);
|
|
BoundAnonymousObjectCreationExpression boundAnonymousObjectCreationExpression;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundAnonymousObjectCreationExpression = node.Update(updatedSymbol, arguments, declarations, value.Item2);
|
|
(boundAnonymousObjectCreationExpression.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundAnonymousObjectCreationExpression = node.Update(updatedSymbol, arguments, declarations, node.Type);
|
|
}
|
|
return boundAnonymousObjectCreationExpression;
|
|
}
|
|
|
|
public override BoundNode? VisitAnonymousPropertyDeclaration(BoundAnonymousPropertyDeclaration node)
|
|
{
|
|
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
|
|
PropertySymbol updatedSymbol = GetUpdatedSymbol(node, node.Property);
|
|
BoundAnonymousPropertyDeclaration boundAnonymousPropertyDeclaration;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundAnonymousPropertyDeclaration = node.Update(updatedSymbol, value.Item2);
|
|
(boundAnonymousPropertyDeclaration.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundAnonymousPropertyDeclaration = node.Update(updatedSymbol, node.Type);
|
|
}
|
|
return boundAnonymousPropertyDeclaration;
|
|
}
|
|
|
|
public override BoundNode? VisitNewT(BoundNewT node)
|
|
{
|
|
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundObjectInitializerExpressionBase initializerExpressionOpt = (BoundObjectInitializerExpressionBase)Visit(node.InitializerExpressionOpt);
|
|
BoundNewT boundNewT;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundNewT = node.Update(initializerExpressionOpt, node.WasTargetTyped, value.Item2);
|
|
(boundNewT.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundNewT = node.Update(initializerExpressionOpt, node.WasTargetTyped, node.Type);
|
|
}
|
|
return boundNewT;
|
|
}
|
|
|
|
public override BoundNode? VisitDelegateCreationExpression(BoundDelegateCreationExpression node)
|
|
{
|
|
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
|
|
MethodSymbol updatedSymbol = GetUpdatedSymbol(node, node.MethodOpt);
|
|
BoundExpression argument = (BoundExpression)Visit(node.Argument);
|
|
BoundDelegateCreationExpression boundDelegateCreationExpression;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundDelegateCreationExpression = node.Update(argument, updatedSymbol, node.IsExtensionMethod, node.WasTargetTyped, value.Item2);
|
|
(boundDelegateCreationExpression.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundDelegateCreationExpression = node.Update(argument, updatedSymbol, node.IsExtensionMethod, node.WasTargetTyped, node.Type);
|
|
}
|
|
return boundDelegateCreationExpression;
|
|
}
|
|
|
|
public override BoundNode? VisitArrayCreation(BoundArrayCreation node)
|
|
{
|
|
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
|
|
ImmutableArray<BoundExpression> bounds = VisitList(node.Bounds);
|
|
BoundArrayInitialization initializerOpt = (BoundArrayInitialization)Visit(node.InitializerOpt);
|
|
BoundArrayCreation boundArrayCreation;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundArrayCreation = node.Update(bounds, initializerOpt, value.Item2);
|
|
(boundArrayCreation.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundArrayCreation = node.Update(bounds, initializerOpt, node.Type);
|
|
}
|
|
return boundArrayCreation;
|
|
}
|
|
|
|
public override BoundNode? VisitArrayInitialization(BoundArrayInitialization node)
|
|
{
|
|
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
|
|
ImmutableArray<BoundExpression> initializers = VisitList(node.Initializers);
|
|
BoundArrayInitialization boundArrayInitialization;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundArrayInitialization = node.Update(node.IsInferred, initializers);
|
|
(boundArrayInitialization.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundArrayInitialization = node.Update(node.IsInferred, initializers);
|
|
}
|
|
return boundArrayInitialization;
|
|
}
|
|
|
|
public override BoundNode? VisitStackAllocArrayCreation(BoundStackAllocArrayCreation node)
|
|
{
|
|
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
|
|
TypeSymbol updatedSymbol = GetUpdatedSymbol(node, node.ElementType);
|
|
BoundExpression count = (BoundExpression)Visit(node.Count);
|
|
BoundArrayInitialization initializerOpt = (BoundArrayInitialization)Visit(node.InitializerOpt);
|
|
BoundStackAllocArrayCreation boundStackAllocArrayCreation;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundStackAllocArrayCreation = node.Update(updatedSymbol, count, initializerOpt, value.Item2);
|
|
(boundStackAllocArrayCreation.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundStackAllocArrayCreation = node.Update(updatedSymbol, count, initializerOpt, node.Type);
|
|
}
|
|
return boundStackAllocArrayCreation;
|
|
}
|
|
|
|
public override BoundNode? VisitConvertedStackAllocExpression(BoundConvertedStackAllocExpression node)
|
|
{
|
|
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
|
|
TypeSymbol updatedSymbol = GetUpdatedSymbol(node, node.ElementType);
|
|
BoundExpression count = (BoundExpression)Visit(node.Count);
|
|
BoundArrayInitialization initializerOpt = (BoundArrayInitialization)Visit(node.InitializerOpt);
|
|
BoundConvertedStackAllocExpression boundConvertedStackAllocExpression;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundConvertedStackAllocExpression = node.Update(updatedSymbol, count, initializerOpt, value.Item2);
|
|
(boundConvertedStackAllocExpression.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundConvertedStackAllocExpression = node.Update(updatedSymbol, count, initializerOpt, node.Type);
|
|
}
|
|
return boundConvertedStackAllocExpression;
|
|
}
|
|
|
|
public override BoundNode? VisitFieldAccess(BoundFieldAccess node)
|
|
{
|
|
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
|
|
FieldSymbol updatedSymbol = GetUpdatedSymbol(node, node.FieldSymbol);
|
|
BoundExpression receiverOpt = (BoundExpression)Visit(node.ReceiverOpt);
|
|
BoundFieldAccess boundFieldAccess;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundFieldAccess = node.Update(receiverOpt, updatedSymbol, node.ConstantValueOpt, node.ResultKind, node.IsByValue, node.IsDeclaration, value.Item2);
|
|
(boundFieldAccess.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundFieldAccess = node.Update(receiverOpt, updatedSymbol, node.ConstantValueOpt, node.ResultKind, node.IsByValue, node.IsDeclaration, node.Type);
|
|
}
|
|
return boundFieldAccess;
|
|
}
|
|
|
|
public override BoundNode? VisitHoistedFieldAccess(BoundHoistedFieldAccess node)
|
|
{
|
|
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
|
|
FieldSymbol updatedSymbol = GetUpdatedSymbol(node, node.FieldSymbol);
|
|
BoundHoistedFieldAccess boundHoistedFieldAccess;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundHoistedFieldAccess = node.Update(updatedSymbol, value.Item2);
|
|
(boundHoistedFieldAccess.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundHoistedFieldAccess = node.Update(updatedSymbol, node.Type);
|
|
}
|
|
return boundHoistedFieldAccess;
|
|
}
|
|
|
|
public override BoundNode? VisitPropertyAccess(BoundPropertyAccess node)
|
|
{
|
|
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
|
|
PropertySymbol updatedSymbol = GetUpdatedSymbol(node, node.PropertySymbol);
|
|
BoundExpression receiverOpt = (BoundExpression)Visit(node.ReceiverOpt);
|
|
BoundPropertyAccess boundPropertyAccess;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundPropertyAccess = node.Update(receiverOpt, node.InitialBindingReceiverIsSubjectToCloning, updatedSymbol, node.ResultKind, value.Item2);
|
|
(boundPropertyAccess.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundPropertyAccess = node.Update(receiverOpt, node.InitialBindingReceiverIsSubjectToCloning, updatedSymbol, node.ResultKind, node.Type);
|
|
}
|
|
return boundPropertyAccess;
|
|
}
|
|
|
|
public override BoundNode? VisitEventAccess(BoundEventAccess node)
|
|
{
|
|
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
|
|
EventSymbol updatedSymbol = GetUpdatedSymbol(node, node.EventSymbol);
|
|
BoundExpression receiverOpt = (BoundExpression)Visit(node.ReceiverOpt);
|
|
BoundEventAccess boundEventAccess;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundEventAccess = node.Update(receiverOpt, updatedSymbol, node.IsUsableAsField, node.ResultKind, value.Item2);
|
|
(boundEventAccess.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundEventAccess = node.Update(receiverOpt, updatedSymbol, node.IsUsableAsField, node.ResultKind, node.Type);
|
|
}
|
|
return boundEventAccess;
|
|
}
|
|
|
|
public override BoundNode? VisitIndexerAccess(BoundIndexerAccess node)
|
|
{
|
|
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_006e: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
|
|
PropertySymbol updatedSymbol = GetUpdatedSymbol(node, node.Indexer);
|
|
GetUpdatedArray(node, node.OriginalIndexersOpt);
|
|
BoundExpression receiverOpt = (BoundExpression)Visit(node.ReceiverOpt);
|
|
ImmutableArray<BoundExpression> arguments = VisitList(node.Arguments);
|
|
BoundIndexerAccess boundIndexerAccess;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundIndexerAccess = node.Update(receiverOpt, node.InitialBindingReceiverIsSubjectToCloning, updatedSymbol, arguments, node.ArgumentNamesOpt, node.ArgumentRefKindsOpt, node.Expanded, node.ArgsToParamsOpt, node.DefaultArguments, node.OriginalIndexersOpt, value.Item2);
|
|
(boundIndexerAccess.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundIndexerAccess = node.Update(receiverOpt, node.InitialBindingReceiverIsSubjectToCloning, updatedSymbol, arguments, node.ArgumentNamesOpt, node.ArgumentRefKindsOpt, node.Expanded, node.ArgsToParamsOpt, node.DefaultArguments, node.OriginalIndexersOpt, node.Type);
|
|
}
|
|
return boundIndexerAccess;
|
|
}
|
|
|
|
public override BoundNode? VisitInlineArrayAccess(BoundInlineArrayAccess node)
|
|
{
|
|
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression expression = (BoundExpression)Visit(node.Expression);
|
|
BoundExpression argument = (BoundExpression)Visit(node.Argument);
|
|
BoundInlineArrayAccess boundInlineArrayAccess;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundInlineArrayAccess = node.Update(expression, argument, node.IsValue, node.GetItemOrSliceHelper, value.Item2);
|
|
(boundInlineArrayAccess.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundInlineArrayAccess = node.Update(expression, argument, node.IsValue, node.GetItemOrSliceHelper, node.Type);
|
|
}
|
|
return boundInlineArrayAccess;
|
|
}
|
|
|
|
public override BoundNode? VisitDynamicIndexerAccess(BoundDynamicIndexerAccess node)
|
|
{
|
|
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
|
|
ImmutableArray<PropertySymbol> updatedArray = GetUpdatedArray(node, node.ApplicableIndexers);
|
|
BoundExpression receiver = (BoundExpression)Visit(node.Receiver);
|
|
ImmutableArray<BoundExpression> arguments = VisitList(node.Arguments);
|
|
BoundDynamicIndexerAccess boundDynamicIndexerAccess;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundDynamicIndexerAccess = node.Update(receiver, arguments, node.ArgumentNamesOpt, node.ArgumentRefKindsOpt, updatedArray, value.Item2);
|
|
(boundDynamicIndexerAccess.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundDynamicIndexerAccess = node.Update(receiver, arguments, node.ArgumentNamesOpt, node.ArgumentRefKindsOpt, updatedArray, node.Type);
|
|
}
|
|
return boundDynamicIndexerAccess;
|
|
}
|
|
|
|
public override BoundNode? VisitLambda(BoundLambda node)
|
|
{
|
|
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
|
|
LambdaSymbol updatedSymbol = GetUpdatedSymbol(node, node.Symbol);
|
|
UnboundLambda unboundLambda = node.UnboundLambda;
|
|
BoundBlock body = (BoundBlock)Visit(node.Body);
|
|
BoundLambda boundLambda;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundLambda = node.Update(unboundLambda, updatedSymbol, body, node.Diagnostics, node.Binder, value.Item2);
|
|
(boundLambda.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundLambda = node.Update(unboundLambda, updatedSymbol, body, node.Diagnostics, node.Binder, node.Type);
|
|
}
|
|
return boundLambda;
|
|
}
|
|
|
|
public override BoundNode? VisitUnboundLambda(UnboundLambda node)
|
|
{
|
|
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
|
|
FunctionTypeSymbol updatedSymbol = GetUpdatedSymbol(node, node.FunctionType);
|
|
UnboundLambda unboundLambda;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
unboundLambda = node.Update(node.Data, updatedSymbol, node.WithDependencies);
|
|
(unboundLambda.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
unboundLambda = node.Update(node.Data, updatedSymbol, node.WithDependencies);
|
|
}
|
|
return unboundLambda;
|
|
}
|
|
|
|
public override BoundNode? VisitQueryClause(BoundQueryClause node)
|
|
{
|
|
//IL_0065: Unknown result type (might be due to invalid IL or missing references)
|
|
RangeVariableSymbol updatedSymbol = GetUpdatedSymbol(node, node.DefinedSymbol);
|
|
BoundExpression value = (BoundExpression)Visit(node.Value);
|
|
BoundExpression operation = node.Operation;
|
|
BoundExpression cast = node.Cast;
|
|
BoundExpression unoptimizedForm = node.UnoptimizedForm;
|
|
BoundQueryClause boundQueryClause;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value2))
|
|
{
|
|
boundQueryClause = node.Update(value, updatedSymbol, operation, cast, node.Binder, unoptimizedForm, value2.Item2);
|
|
(boundQueryClause.TopLevelNullability, _) = value2;
|
|
}
|
|
else
|
|
{
|
|
boundQueryClause = node.Update(value, updatedSymbol, operation, cast, node.Binder, unoptimizedForm, node.Type);
|
|
}
|
|
return boundQueryClause;
|
|
}
|
|
|
|
public override BoundNode? VisitNameOfOperator(BoundNameOfOperator node)
|
|
{
|
|
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression argument = (BoundExpression)Visit(node.Argument);
|
|
BoundNameOfOperator boundNameOfOperator;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundNameOfOperator = node.Update(argument, node.ConstantValueOpt, value.Item2);
|
|
(boundNameOfOperator.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundNameOfOperator = node.Update(argument, node.ConstantValueOpt, node.Type);
|
|
}
|
|
return boundNameOfOperator;
|
|
}
|
|
|
|
public override BoundNode? VisitUnconvertedInterpolatedString(BoundUnconvertedInterpolatedString node)
|
|
{
|
|
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
|
|
ImmutableArray<BoundExpression> parts = VisitList(node.Parts);
|
|
BoundUnconvertedInterpolatedString boundUnconvertedInterpolatedString;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundUnconvertedInterpolatedString = node.Update(parts, node.ConstantValueOpt, value.Item2);
|
|
(boundUnconvertedInterpolatedString.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundUnconvertedInterpolatedString = node.Update(parts, node.ConstantValueOpt, node.Type);
|
|
}
|
|
return boundUnconvertedInterpolatedString;
|
|
}
|
|
|
|
public override BoundNode? VisitInterpolatedString(BoundInterpolatedString node)
|
|
{
|
|
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
|
|
ImmutableArray<BoundExpression> parts = VisitList(node.Parts);
|
|
BoundInterpolatedString boundInterpolatedString;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundInterpolatedString = node.Update(node.InterpolationData, parts, node.ConstantValueOpt, value.Item2);
|
|
(boundInterpolatedString.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundInterpolatedString = node.Update(node.InterpolationData, parts, node.ConstantValueOpt, node.Type);
|
|
}
|
|
return boundInterpolatedString;
|
|
}
|
|
|
|
public override BoundNode? VisitInterpolatedStringHandlerPlaceholder(BoundInterpolatedStringHandlerPlaceholder node)
|
|
{
|
|
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundInterpolatedStringHandlerPlaceholder boundInterpolatedStringHandlerPlaceholder = node.Update(value.Item2);
|
|
(boundInterpolatedStringHandlerPlaceholder.TopLevelNullability, _) = value;
|
|
return boundInterpolatedStringHandlerPlaceholder;
|
|
}
|
|
|
|
public override BoundNode? VisitInterpolatedStringArgumentPlaceholder(BoundInterpolatedStringArgumentPlaceholder node)
|
|
{
|
|
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundInterpolatedStringArgumentPlaceholder boundInterpolatedStringArgumentPlaceholder = node.Update(node.ArgumentIndex, value.Item2);
|
|
(boundInterpolatedStringArgumentPlaceholder.TopLevelNullability, _) = value;
|
|
return boundInterpolatedStringArgumentPlaceholder;
|
|
}
|
|
|
|
public override BoundNode? VisitStringInsert(BoundStringInsert node)
|
|
{
|
|
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression value = (BoundExpression)Visit(node.Value);
|
|
BoundExpression alignment = (BoundExpression)Visit(node.Alignment);
|
|
BoundLiteral format = (BoundLiteral)Visit(node.Format);
|
|
BoundStringInsert boundStringInsert;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value2))
|
|
{
|
|
boundStringInsert = node.Update(value, alignment, format, node.IsInterpolatedStringHandlerAppendCall);
|
|
(boundStringInsert.TopLevelNullability, _) = value2;
|
|
}
|
|
else
|
|
{
|
|
boundStringInsert = node.Update(value, alignment, format, node.IsInterpolatedStringHandlerAppendCall);
|
|
}
|
|
return boundStringInsert;
|
|
}
|
|
|
|
public override BoundNode? VisitIsPatternExpression(BoundIsPatternExpression node)
|
|
{
|
|
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression expression = (BoundExpression)Visit(node.Expression);
|
|
BoundPattern pattern = (BoundPattern)Visit(node.Pattern);
|
|
BoundDecisionDag reachabilityDecisionDag = node.ReachabilityDecisionDag;
|
|
BoundIsPatternExpression boundIsPatternExpression;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundIsPatternExpression = node.Update(expression, pattern, node.IsNegated, reachabilityDecisionDag, node.WhenTrueLabel, node.WhenFalseLabel, value.Item2);
|
|
(boundIsPatternExpression.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundIsPatternExpression = node.Update(expression, pattern, node.IsNegated, reachabilityDecisionDag, node.WhenTrueLabel, node.WhenFalseLabel, node.Type);
|
|
}
|
|
return boundIsPatternExpression;
|
|
}
|
|
|
|
public override BoundNode? VisitConstantPattern(BoundConstantPattern node)
|
|
{
|
|
TypeSymbol updatedSymbol = GetUpdatedSymbol(node, node.InputType);
|
|
TypeSymbol updatedSymbol2 = GetUpdatedSymbol(node, node.NarrowedType);
|
|
BoundExpression value = (BoundExpression)Visit(node.Value);
|
|
return node.Update(value, node.ConstantValue, updatedSymbol, updatedSymbol2);
|
|
}
|
|
|
|
public override BoundNode? VisitDiscardPattern(BoundDiscardPattern node)
|
|
{
|
|
TypeSymbol updatedSymbol = GetUpdatedSymbol(node, node.InputType);
|
|
TypeSymbol updatedSymbol2 = GetUpdatedSymbol(node, node.NarrowedType);
|
|
return node.Update(updatedSymbol, updatedSymbol2);
|
|
}
|
|
|
|
public override BoundNode? VisitDeclarationPattern(BoundDeclarationPattern node)
|
|
{
|
|
Symbol updatedSymbol = GetUpdatedSymbol(node, node.Variable);
|
|
TypeSymbol updatedSymbol2 = GetUpdatedSymbol(node, node.InputType);
|
|
TypeSymbol updatedSymbol3 = GetUpdatedSymbol(node, node.NarrowedType);
|
|
BoundTypeExpression declaredType = (BoundTypeExpression)Visit(node.DeclaredType);
|
|
BoundExpression variableAccess = (BoundExpression)Visit(node.VariableAccess);
|
|
return node.Update(declaredType, node.IsVar, updatedSymbol, variableAccess, updatedSymbol2, updatedSymbol3);
|
|
}
|
|
|
|
public override BoundNode? VisitRecursivePattern(BoundRecursivePattern node)
|
|
{
|
|
MethodSymbol updatedSymbol = GetUpdatedSymbol(node, node.DeconstructMethod);
|
|
Symbol updatedSymbol2 = GetUpdatedSymbol(node, node.Variable);
|
|
TypeSymbol updatedSymbol3 = GetUpdatedSymbol(node, node.InputType);
|
|
TypeSymbol updatedSymbol4 = GetUpdatedSymbol(node, node.NarrowedType);
|
|
BoundTypeExpression declaredType = (BoundTypeExpression)Visit(node.DeclaredType);
|
|
ImmutableArray<BoundPositionalSubpattern> deconstruction = VisitList(node.Deconstruction);
|
|
ImmutableArray<BoundPropertySubpattern> properties = VisitList(node.Properties);
|
|
BoundExpression variableAccess = (BoundExpression)Visit(node.VariableAccess);
|
|
return node.Update(declaredType, updatedSymbol, deconstruction, properties, node.IsExplicitNotNullTest, updatedSymbol2, variableAccess, updatedSymbol3, updatedSymbol4);
|
|
}
|
|
|
|
public override BoundNode? VisitListPattern(BoundListPattern node)
|
|
{
|
|
Symbol updatedSymbol = GetUpdatedSymbol(node, node.Variable);
|
|
TypeSymbol updatedSymbol2 = GetUpdatedSymbol(node, node.InputType);
|
|
TypeSymbol updatedSymbol3 = GetUpdatedSymbol(node, node.NarrowedType);
|
|
ImmutableArray<BoundPattern> subpatterns = VisitList(node.Subpatterns);
|
|
BoundExpression lengthAccess = node.LengthAccess;
|
|
BoundExpression indexerAccess = node.IndexerAccess;
|
|
BoundListPatternReceiverPlaceholder receiverPlaceholder = node.ReceiverPlaceholder;
|
|
BoundListPatternIndexPlaceholder argumentPlaceholder = node.ArgumentPlaceholder;
|
|
BoundExpression variableAccess = (BoundExpression)Visit(node.VariableAccess);
|
|
return node.Update(subpatterns, node.HasSlice, lengthAccess, indexerAccess, receiverPlaceholder, argumentPlaceholder, updatedSymbol, variableAccess, updatedSymbol2, updatedSymbol3);
|
|
}
|
|
|
|
public override BoundNode? VisitSlicePattern(BoundSlicePattern node)
|
|
{
|
|
TypeSymbol updatedSymbol = GetUpdatedSymbol(node, node.InputType);
|
|
TypeSymbol updatedSymbol2 = GetUpdatedSymbol(node, node.NarrowedType);
|
|
BoundPattern pattern = (BoundPattern)Visit(node.Pattern);
|
|
BoundExpression indexerAccess = node.IndexerAccess;
|
|
BoundSlicePatternReceiverPlaceholder receiverPlaceholder = node.ReceiverPlaceholder;
|
|
BoundSlicePatternRangePlaceholder argumentPlaceholder = node.ArgumentPlaceholder;
|
|
return node.Update(pattern, indexerAccess, receiverPlaceholder, argumentPlaceholder, updatedSymbol, updatedSymbol2);
|
|
}
|
|
|
|
public override BoundNode? VisitITuplePattern(BoundITuplePattern node)
|
|
{
|
|
MethodSymbol updatedSymbol = GetUpdatedSymbol(node, node.GetLengthMethod);
|
|
MethodSymbol updatedSymbol2 = GetUpdatedSymbol(node, node.GetItemMethod);
|
|
TypeSymbol updatedSymbol3 = GetUpdatedSymbol(node, node.InputType);
|
|
TypeSymbol updatedSymbol4 = GetUpdatedSymbol(node, node.NarrowedType);
|
|
ImmutableArray<BoundPositionalSubpattern> subpatterns = VisitList(node.Subpatterns);
|
|
return node.Update(updatedSymbol, updatedSymbol2, subpatterns, updatedSymbol3, updatedSymbol4);
|
|
}
|
|
|
|
public override BoundNode? VisitPositionalSubpattern(BoundPositionalSubpattern node)
|
|
{
|
|
Symbol updatedSymbol = GetUpdatedSymbol(node, node.Symbol);
|
|
BoundPattern pattern = (BoundPattern)Visit(node.Pattern);
|
|
return node.Update(updatedSymbol, pattern);
|
|
}
|
|
|
|
public override BoundNode? VisitPropertySubpatternMember(BoundPropertySubpatternMember node)
|
|
{
|
|
Symbol updatedSymbol = GetUpdatedSymbol(node, node.Symbol);
|
|
BoundPropertySubpatternMember receiver = (BoundPropertySubpatternMember)Visit(node.Receiver);
|
|
return node.Update(receiver, updatedSymbol, node.Type);
|
|
}
|
|
|
|
public override BoundNode? VisitTypePattern(BoundTypePattern node)
|
|
{
|
|
TypeSymbol updatedSymbol = GetUpdatedSymbol(node, node.InputType);
|
|
TypeSymbol updatedSymbol2 = GetUpdatedSymbol(node, node.NarrowedType);
|
|
BoundTypeExpression declaredType = (BoundTypeExpression)Visit(node.DeclaredType);
|
|
return node.Update(declaredType, node.IsExplicitNotNullTest, updatedSymbol, updatedSymbol2);
|
|
}
|
|
|
|
public override BoundNode? VisitBinaryPattern(BoundBinaryPattern node)
|
|
{
|
|
TypeSymbol updatedSymbol = GetUpdatedSymbol(node, node.InputType);
|
|
TypeSymbol updatedSymbol2 = GetUpdatedSymbol(node, node.NarrowedType);
|
|
BoundPattern left = (BoundPattern)Visit(node.Left);
|
|
BoundPattern right = (BoundPattern)Visit(node.Right);
|
|
return node.Update(node.Disjunction, left, right, updatedSymbol, updatedSymbol2);
|
|
}
|
|
|
|
public override BoundNode? VisitNegatedPattern(BoundNegatedPattern node)
|
|
{
|
|
TypeSymbol updatedSymbol = GetUpdatedSymbol(node, node.InputType);
|
|
TypeSymbol updatedSymbol2 = GetUpdatedSymbol(node, node.NarrowedType);
|
|
BoundPattern negated = (BoundPattern)Visit(node.Negated);
|
|
return node.Update(negated, updatedSymbol, updatedSymbol2);
|
|
}
|
|
|
|
public override BoundNode? VisitRelationalPattern(BoundRelationalPattern node)
|
|
{
|
|
TypeSymbol updatedSymbol = GetUpdatedSymbol(node, node.InputType);
|
|
TypeSymbol updatedSymbol2 = GetUpdatedSymbol(node, node.NarrowedType);
|
|
BoundExpression value = (BoundExpression)Visit(node.Value);
|
|
return node.Update(node.Relation, value, node.ConstantValue, updatedSymbol, updatedSymbol2);
|
|
}
|
|
|
|
public override BoundNode? VisitDiscardExpression(BoundDiscardExpression node)
|
|
{
|
|
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
|
|
if (!_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
return node;
|
|
}
|
|
BoundDiscardExpression boundDiscardExpression = node.Update(node.NullableAnnotation, node.IsInferred, value.Item2);
|
|
(boundDiscardExpression.TopLevelNullability, _) = value;
|
|
return boundDiscardExpression;
|
|
}
|
|
|
|
public override BoundNode? VisitThrowExpression(BoundThrowExpression node)
|
|
{
|
|
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression expression = (BoundExpression)Visit(node.Expression);
|
|
BoundThrowExpression boundThrowExpression;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundThrowExpression = node.Update(expression, value.Item2);
|
|
(boundThrowExpression.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundThrowExpression = node.Update(expression, node.Type);
|
|
}
|
|
return boundThrowExpression;
|
|
}
|
|
|
|
public override BoundNode? VisitOutVariablePendingInference(OutVariablePendingInference node)
|
|
{
|
|
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
|
|
Symbol updatedSymbol = GetUpdatedSymbol(node, node.VariableSymbol);
|
|
BoundExpression receiverOpt = (BoundExpression)Visit(node.ReceiverOpt);
|
|
OutVariablePendingInference outVariablePendingInference;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
outVariablePendingInference = node.Update(updatedSymbol, receiverOpt);
|
|
(outVariablePendingInference.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
outVariablePendingInference = node.Update(updatedSymbol, receiverOpt);
|
|
}
|
|
return outVariablePendingInference;
|
|
}
|
|
|
|
public override BoundNode? VisitDeconstructionVariablePendingInference(DeconstructionVariablePendingInference node)
|
|
{
|
|
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
|
|
Symbol updatedSymbol = GetUpdatedSymbol(node, node.VariableSymbol);
|
|
BoundExpression receiverOpt = (BoundExpression)Visit(node.ReceiverOpt);
|
|
DeconstructionVariablePendingInference deconstructionVariablePendingInference;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
deconstructionVariablePendingInference = node.Update(updatedSymbol, receiverOpt);
|
|
(deconstructionVariablePendingInference.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
deconstructionVariablePendingInference = node.Update(updatedSymbol, receiverOpt);
|
|
}
|
|
return deconstructionVariablePendingInference;
|
|
}
|
|
|
|
public override BoundNode? VisitOutDeconstructVarPendingInference(OutDeconstructVarPendingInference node)
|
|
{
|
|
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
|
|
Symbol updatedSymbol = GetUpdatedSymbol(node, node.VariableSymbol);
|
|
OutDeconstructVarPendingInference outDeconstructVarPendingInference;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
outDeconstructVarPendingInference = node.Update(updatedSymbol, node.IsDiscardExpression);
|
|
(outDeconstructVarPendingInference.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
outDeconstructVarPendingInference = node.Update(updatedSymbol, node.IsDiscardExpression);
|
|
}
|
|
return outDeconstructVarPendingInference;
|
|
}
|
|
|
|
public override BoundNode? VisitConstructorMethodBody(BoundConstructorMethodBody node)
|
|
{
|
|
ImmutableArray<LocalSymbol> updatedArray = GetUpdatedArray(node, node.Locals);
|
|
BoundStatement initializer = (BoundStatement)Visit(node.Initializer);
|
|
BoundBlock blockBody = (BoundBlock)Visit(node.BlockBody);
|
|
BoundBlock expressionBody = (BoundBlock)Visit(node.ExpressionBody);
|
|
return node.Update(updatedArray, initializer, blockBody, expressionBody);
|
|
}
|
|
|
|
public override BoundNode? VisitExpressionWithNullability(BoundExpressionWithNullability node)
|
|
{
|
|
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
|
|
BoundExpression expression = (BoundExpression)Visit(node.Expression);
|
|
BoundExpressionWithNullability boundExpressionWithNullability;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundExpressionWithNullability = node.Update(expression, node.NullableAnnotation, value.Item2);
|
|
(boundExpressionWithNullability.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundExpressionWithNullability = node.Update(expression, node.NullableAnnotation, node.Type);
|
|
}
|
|
return boundExpressionWithNullability;
|
|
}
|
|
|
|
public override BoundNode? VisitWithExpression(BoundWithExpression node)
|
|
{
|
|
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
|
|
MethodSymbol updatedSymbol = GetUpdatedSymbol(node, node.CloneMethod);
|
|
BoundExpression receiver = (BoundExpression)Visit(node.Receiver);
|
|
BoundObjectInitializerExpressionBase initializerExpression = (BoundObjectInitializerExpressionBase)Visit(node.InitializerExpression);
|
|
BoundWithExpression boundWithExpression;
|
|
if (_updatedNullabilities.TryGetValue(node, out (NullabilityInfo, TypeSymbol) value))
|
|
{
|
|
boundWithExpression = node.Update(receiver, updatedSymbol, initializerExpression, value.Item2);
|
|
(boundWithExpression.TopLevelNullability, _) = value;
|
|
}
|
|
else
|
|
{
|
|
boundWithExpression = node.Update(receiver, updatedSymbol, initializerExpression, node.Type);
|
|
}
|
|
return boundWithExpression;
|
|
}
|
|
}
|