コード例 #1
0
        public static INumericalEnvironmentDomain <TVar, TExpr> AssumeInInterval <TVar, TExpr> (
            this INumericalEnvironmentDomain <TVar, TExpr> domain, TExpr expr, Interval intv,
            IExpressionEncoder <TVar, TExpr> encoder)
        {
            if (!domain.IsNormal())
            {
                return(domain);
            }

            if (intv.IsBottom)
            {
                return(domain.Bottom);
            }

            if (!intv.LowerBound.IsInfinity)
            {
                domain = domain.AssumeLessEqualThan(intv.LowerBound.ToExpression(encoder), expr);
            }

            if (!intv.UpperBound.IsInfinity)
            {
                domain = domain.AssumeLessEqualThan(expr, intv.LowerBound.ToExpression(encoder));
            }

            return(domain);
        }
コード例 #2
0
                INumericalEnvironmentDomain <BoxedVariable <TVar>, BoxedExpression> SetInitialRange
                    (TVar variable, TypeNode type,
                    INumericalEnvironmentDomain <BoxedVariable <TVar>, BoxedExpression> data)
                {
                    var interval = Interval.Ranges.GetIntervalForType(type,
                                                                      MetaDataProvider);

                    if (interval.IsNormal())
                    {
                        data = data.AssumeVariableIn(new BoxedVariable <TVar> (variable),
                                                     interval);
                    }
                    return(data);
                }
コード例 #3
0
                public override INumericalEnvironmentDomain <BoxedVariable <TVar>, BoxedExpression> Entry
                    (APC pc, Method method,
                    INumericalEnvironmentDomain <BoxedVariable <TVar>, BoxedExpression> data)
                {
                    foreach (var param in MetaDataProvider.Parameters(method).AsEnumerable())
                    {
                        TVar variable;
                        var  readAt = ContextProvider.MethodContext.CFG.Post(pc);
                        if (!ContextProvider.ValueContext.TryParameterValue(readAt, param, out variable))
                        {
                            continue;
                        }

                        var abstractType = ContextProvider.ValueContext.GetType(readAt,
                                                                                variable);
                        if (abstractType.IsNormal() && MetaDataProvider.IsPrimitive(abstractType.Value))
                        {
                            data = SetInitialRange(variable, abstractType.Value, data);
                        }
                    }

                    return(data);
                }
コード例 #4
0
 bool IAbstractDomain <INumericalEnvironmentDomain <TVar, TExpr> > .LessEqual(INumericalEnvironmentDomain <TVar, TExpr> that)
 {
     return(LessEqual(that as IntervalEnvironmentBase <TVar, TExpr, TInterval, TNumeric>));
 }
コード例 #5
0
 INumericalEnvironmentDomain <TVar, TExpr> IAbstractDomain <INumericalEnvironmentDomain <TVar, TExpr> > .Meet(INumericalEnvironmentDomain <TVar, TExpr> that)
 {
     return(Meet(that as IntervalEnvironmentBase <TVar, TExpr, TInterval, TNumeric>));
 }
コード例 #6
0
 INumericalEnvironmentDomain <TVar, TExpr> IAbstractDomain <INumericalEnvironmentDomain <TVar, TExpr> > .Join
     (INumericalEnvironmentDomain <TVar, TExpr> that, bool widen, out bool weaker)
 {
     return(Join(that as IntervalEnvironmentBase <TVar, TExpr, TInterval, TNumeric>, widen,
                 out weaker));
 }