Package it.unive.lisa.analysis.numeric
Class Interval
- java.lang.Object
-
- it.unive.lisa.analysis.BaseLattice<T>
-
- it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
-
- it.unive.lisa.analysis.numeric.Interval
-
- All Implemented Interfaces:
it.unive.lisa.analysis.Lattice<Interval>,it.unive.lisa.analysis.nonrelational.NonRelationalDomain<Interval,it.unive.lisa.symbolic.value.ValueExpression,it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Interval>>,it.unive.lisa.analysis.nonrelational.NonRelationalElement<Interval,it.unive.lisa.symbolic.value.ValueExpression,it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Interval>>,it.unive.lisa.analysis.nonrelational.value.NonRelationalValueDomain<Interval>,it.unive.lisa.analysis.SemanticEvaluator
public class Interval extends it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
The overflow-insensitive interval abstract domain, approximating integer values as the minimum integer interval containing them. It is implemented as aBaseNonRelationalValueDomain, handling top and bottom values for the expression evaluation and bottom values for the expression satisfiability. Top and bottom cases for least upper bounds, widening and less or equals operations are handled byBaseLatticeinBaseLattice.lub(L),BaseLattice.widening(L)andBaseLattice.lessOrEqual(L)methods, respectively.
-
-
Field Summary
Fields Modifier and Type Field Description it.unive.lisa.util.numeric.IntIntervalintervalThe interval represented by this domain element.
-
Constructor Summary
Constructors Constructor Description Interval()Builds the top interval.Interval(int low, int high)Builds the interval.Interval(it.unive.lisa.util.numeric.IntInterval interval)Builds the interval.Interval(it.unive.lisa.util.numeric.MathNumber low, it.unive.lisa.util.numeric.MathNumber high)Builds the interval.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Interval>assumeBinaryExpression(it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Interval> environment, it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, it.unive.lisa.symbolic.value.ValueExpression left, it.unive.lisa.symbolic.value.ValueExpression right, it.unive.lisa.program.cfg.ProgramPoint pp)Intervalbottom()booleanequals(java.lang.Object obj)protected IntervalevalBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, Interval left, Interval right, it.unive.lisa.program.cfg.ProgramPoint pp)protected IntervalevalNonNullConstant(it.unive.lisa.symbolic.value.Constant constant, it.unive.lisa.program.cfg.ProgramPoint pp)protected IntervalevalUnaryExpression(it.unive.lisa.symbolic.value.operator.unary.UnaryOperator operator, Interval arg, it.unive.lisa.program.cfg.ProgramPoint pp)protected IntervalglbAux(Interval other)inthashCode()booleanisBottom()booleanisTop()protected booleanlessOrEqualAux(Interval other)protected IntervallubAux(Interval other)it.unive.lisa.analysis.representation.DomainRepresentationrepresentation()protected it.unive.lisa.analysis.SemanticDomain.SatisfiabilitysatisfiesBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, Interval left, Interval right, it.unive.lisa.program.cfg.ProgramPoint pp)Intervaltop()protected IntervalwideningAux(Interval other)-
Methods inherited from class it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain
assume, assumeTernaryExpression, assumeUnaryExpression, canProcess, eval, evalIdentifier, evalNullConstant, evalPushAny, evalTernaryExpression, evalTypeCast, evalTypeConv, glb, satisfies, satisfiesAbstractValue, satisfiesNonNullConstant, satisfiesNullConstant, satisfiesTernaryExpression, satisfiesUnaryExpression, toString, tracksIdentifiers
-
-
-
-
Constructor Detail
-
Interval
public Interval(it.unive.lisa.util.numeric.IntInterval interval)
Builds the interval.- Parameters:
interval- the underlyingIntInterval
-
Interval
public Interval(it.unive.lisa.util.numeric.MathNumber low, it.unive.lisa.util.numeric.MathNumber high)Builds the interval.- Parameters:
low- the lower boundhigh- the higher bound
-
Interval
public Interval(int low, int high)Builds the interval.- Parameters:
low- the lower boundhigh- the higher bound
-
Interval
public Interval()
Builds the top interval.
-
-
Method Detail
-
top
public Interval top()
-
isTop
public boolean isTop()
-
bottom
public Interval bottom()
-
isBottom
public boolean isBottom()
-
representation
public it.unive.lisa.analysis.representation.DomainRepresentation representation()
-
evalNonNullConstant
protected Interval evalNonNullConstant(it.unive.lisa.symbolic.value.Constant constant, it.unive.lisa.program.cfg.ProgramPoint pp)
- Overrides:
evalNonNullConstantin classit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
-
evalUnaryExpression
protected Interval evalUnaryExpression(it.unive.lisa.symbolic.value.operator.unary.UnaryOperator operator, Interval arg, it.unive.lisa.program.cfg.ProgramPoint pp)
- Overrides:
evalUnaryExpressionin classit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
-
evalBinaryExpression
protected Interval evalBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, Interval left, Interval right, it.unive.lisa.program.cfg.ProgramPoint pp)
- Overrides:
evalBinaryExpressionin classit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
-
lubAux
protected Interval lubAux(Interval other) throws it.unive.lisa.analysis.SemanticException
- Specified by:
lubAuxin classit.unive.lisa.analysis.BaseLattice<Interval>- Throws:
it.unive.lisa.analysis.SemanticException
-
glbAux
protected Interval glbAux(Interval other)
- Overrides:
glbAuxin classit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
-
wideningAux
protected Interval wideningAux(Interval other) throws it.unive.lisa.analysis.SemanticException
- Specified by:
wideningAuxin classit.unive.lisa.analysis.BaseLattice<Interval>- Throws:
it.unive.lisa.analysis.SemanticException
-
lessOrEqualAux
protected boolean lessOrEqualAux(Interval other) throws it.unive.lisa.analysis.SemanticException
- Specified by:
lessOrEqualAuxin classit.unive.lisa.analysis.BaseLattice<Interval>- Throws:
it.unive.lisa.analysis.SemanticException
-
satisfiesBinaryExpression
protected it.unive.lisa.analysis.SemanticDomain.Satisfiability satisfiesBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, Interval left, Interval right, it.unive.lisa.program.cfg.ProgramPoint pp)- Overrides:
satisfiesBinaryExpressionin classit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
-
hashCode
public int hashCode()
- Specified by:
hashCodein classit.unive.lisa.analysis.BaseLattice<Interval>
-
equals
public boolean equals(java.lang.Object obj)
- Specified by:
equalsin classit.unive.lisa.analysis.BaseLattice<Interval>
-
assumeBinaryExpression
protected it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Interval> assumeBinaryExpression(it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Interval> environment, it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, it.unive.lisa.symbolic.value.ValueExpression left, it.unive.lisa.symbolic.value.ValueExpression right, it.unive.lisa.program.cfg.ProgramPoint pp) throws it.unive.lisa.analysis.SemanticException
- Overrides:
assumeBinaryExpressionin classit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>- Throws:
it.unive.lisa.analysis.SemanticException
-
-