public override NullAbstractValue VisitCoalesce(ICoalesceOperation operation, object argument) { var leftValue = Visit(operation.Value, argument); var rightValue = Visit(operation.WhenNull, argument); if (operation.Type.IsNonNullableValueType()) { return(NullAbstractValue.NotNull); } if (rightValue == NullAbstractValue.NotNull) { return(NullAbstractValue.NotNull); } switch (leftValue) { case NullAbstractValue.NotNull: return(NullAbstractValue.NotNull); case NullAbstractValue.Null: return(rightValue); default: return(NullAbstractValue.MaybeNull); } }
public override IOperation VisitCoalesce(ICoalesceOperation operation, object argument) { var coalesceOperation = (BaseCoalesceExpression)operation; return(new CoalesceExpression(Visit(operation.Value), Visit(operation.WhenNull), coalesceOperation.ConvertibleValueConversion, coalesceOperation.SemanticModel, operation.Syntax, operation.Type, operation.ConstantValue, operation.IsImplicit)); }
public override PointsToAbstractValue VisitCoalesce(ICoalesceOperation operation, object argument) { var value = base.VisitCoalesce(operation, argument); var rightNullValue = GetNullAbstractValue(operation.WhenNull); if (rightNullValue == NullAbstractValue.NotNull) { value = value.MakeNonNull(operation); } return(value); }
public override void VisitCoalesce([NotNull] ICoalesceOperation operation) { EvaluationResult valueResult = owner.AnalyzeExpression(operation.Value); if (valueResult.IsDeferred) { Result.CopyFrom(valueResult); } else { EvaluationResult alternativeResult = owner.AnalyzeExpression(operation.WhenNull); Result.CopyFrom(EvaluationResult.Unify(valueResult, alternativeResult)); } }
public override TAbstractAnalysisValue VisitCoalesce(ICoalesceOperation operation, object argument) { var leftValue = Visit(operation.Value, argument); var rightValue = Visit(operation.WhenNull, argument); var leftNullValue = GetNullAbstractValue(operation.Value); switch (leftNullValue) { case NullAbstractValue.Null: return(rightValue); case NullAbstractValue.NotNull: return(leftValue); default: return(ValueDomain.Merge(leftValue, rightValue)); } }
public override void VisitCoalesce(ICoalesceOperation operation) { Assert.Equal(OperationKind.Coalesce, operation.Kind); AssertEx.Equal(new[] { operation.Value, operation.WhenNull }, operation.Children); }
public virtual void VisitCoalesce(ICoalesceOperation operation) { DefaultVisit(operation); }
public override void VisitCoalesce([NotNull] ICoalesceOperation operation) { base.VisitCoalesce(operation); }
public override bool VisitCoalesce([NotNull] ICoalesceOperation operation1, [CanBeNull] IOperation argument) { return(argument is ICoalesceOperation operation2 && AreBaseOperationsEqual(operation1, operation2)); }