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);
                }
            }
Пример #2
0
        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));
        }
Пример #3
0
            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));
            }
        }
Пример #6
0
 public override void VisitCoalesce(ICoalesceOperation operation)
 {
     Assert.Equal(OperationKind.Coalesce, operation.Kind);
     AssertEx.Equal(new[] { operation.Value, operation.WhenNull }, operation.Children);
 }
Пример #7
0
 public virtual void VisitCoalesce(ICoalesceOperation operation)
 {
     DefaultVisit(operation);
 }
Пример #8
0
 public override void VisitCoalesce([NotNull] ICoalesceOperation operation)
 {
     base.VisitCoalesce(operation);
 }
Пример #9
0
 public override bool VisitCoalesce([NotNull] ICoalesceOperation operation1, [CanBeNull] IOperation argument)
 {
     return(argument is ICoalesceOperation operation2 && AreBaseOperationsEqual(operation1, operation2));
 }