public override void VisitFlowCapture(IFlowCaptureOperation operation) { Assert.Equal(OperationKind.FlowCapture, operation.Kind); Assert.True(operation.IsImplicit); Assert.Same(operation.Value, operation.Children.Single()); switch (operation.Value.Kind) { case OperationKind.Invalid: case OperationKind.None: case OperationKind.AnonymousFunction: case OperationKind.FlowCaptureReference: case OperationKind.DefaultValue: case OperationKind.FlowAnonymousFunction: // must be an error case like in Microsoft.CodeAnalysis.CSharp.UnitTests.ConditionalOperatorTests.TestBothUntyped unit-test break; case OperationKind.OmittedArgument: case OperationKind.DeclarationExpression: case OperationKind.Discard: Assert.False(true, $"A {operation.Value.Kind} node should not be spilled or captured."); break; default: // Only values can be spilled/captured if (!operation.Value.ConstantValue.HasValue || operation.Value.ConstantValue.Value != null) { Assert.NotNull(operation.Value.Type); } break; } }
public override IOperation VisitFlowCapture( IFlowCaptureOperation operation, object?argument ) { throw ExceptionUtilities.Unreachable; }
public virtual void VisitFlowCapture(IFlowCaptureOperation operation) { DefaultVisit(operation); }