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); }
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); }
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); }
bool IAbstractDomain <INumericalEnvironmentDomain <TVar, TExpr> > .LessEqual(INumericalEnvironmentDomain <TVar, TExpr> that) { return(LessEqual(that as IntervalEnvironmentBase <TVar, TExpr, TInterval, TNumeric>)); }
INumericalEnvironmentDomain <TVar, TExpr> IAbstractDomain <INumericalEnvironmentDomain <TVar, TExpr> > .Meet(INumericalEnvironmentDomain <TVar, TExpr> that) { return(Meet(that as IntervalEnvironmentBase <TVar, TExpr, TInterval, TNumeric>)); }
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)); }