Package it.unive.lisa.analysis.numeric
Class Interval
- java.lang.Object
-
- it.unive.lisa.analysis.numeric.Interval
-
- All Implemented Interfaces:
it.unive.lisa.analysis.BaseLattice<Interval>,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.BaseNonRelationalValueDomain<Interval>,it.unive.lisa.analysis.nonrelational.value.NonRelationalValueDomain<Interval>,it.unive.lisa.analysis.SemanticEvaluator,java.lang.Comparable<Interval>
public class Interval extends java.lang.Object implements it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>, java.lang.Comparable<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 static IntervalBOTTOMThe abstract bottom element.it.unive.lisa.util.numeric.IntIntervalintervalThe interval represented by this domain element.static IntervalTOPThe abstract top ([-Inf, +Inf]) element.static IntervalZEROThe abstract zero ([0, 0]) 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 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 src, it.unive.lisa.program.cfg.ProgramPoint dest)Intervalbottom()intcompareTo(Interval o)booleanequals(java.lang.Object obj)IntervalevalBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, Interval left, Interval right, it.unive.lisa.program.cfg.ProgramPoint pp)IntervalevalNonNullConstant(it.unive.lisa.symbolic.value.Constant constant, it.unive.lisa.program.cfg.ProgramPoint pp)IntervalevalUnaryExpression(it.unive.lisa.symbolic.value.operator.unary.UnaryOperator operator, Interval arg, it.unive.lisa.program.cfg.ProgramPoint pp)IntervalglbAux(Interval other)inthashCode()booleanis(int n)Tests whether this interval instance corresponds (i.e., concretizes) exactly to the given integer.booleanisBottom()booleanisTop()booleanlessOrEqualAux(Interval other)IntervallubAux(Interval other)IntervalnarrowingAux(Interval other)it.unive.lisa.analysis.representation.DomainRepresentationrepresentation()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()java.lang.StringtoString()IntervalwideningAux(Interval other)-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface it.unive.lisa.analysis.BaseLattice
glb, lessOrEqual, lub, narrowing, widening
-
Methods inherited from interface it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain
assume, assumeTernaryExpression, assumeUnaryExpression, canProcess, eval, evalIdentifier, evalNullConstant, evalPushAny, evalSkip, evalTernaryExpression, evalTypeCast, evalTypeConv, satisfies, satisfiesAbstractValue, satisfiesNonNullConstant, satisfiesNullConstant, satisfiesTernaryExpression, satisfiesUnaryExpression, tracksIdentifiers
-
-
-
-
Field Detail
-
ZERO
public static final Interval ZERO
The abstract zero ([0, 0]) element.
-
TOP
public static final Interval TOP
The abstract top ([-Inf, +Inf]) element.
-
BOTTOM
public static final Interval BOTTOM
The abstract bottom element.
-
interval
public final it.unive.lisa.util.numeric.IntInterval interval
The interval represented by this domain element.
-
-
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
-
isTop
public boolean isTop()
- Specified by:
isTopin interfaceit.unive.lisa.analysis.Lattice<Interval>
-
bottom
public Interval bottom()
- Specified by:
bottomin interfaceit.unive.lisa.analysis.Lattice<Interval>
-
isBottom
public boolean isBottom()
- Specified by:
isBottomin interfaceit.unive.lisa.analysis.Lattice<Interval>
-
representation
public it.unive.lisa.analysis.representation.DomainRepresentation representation()
-
toString
public java.lang.String toString()
- Specified by:
toStringin interfaceit.unive.lisa.analysis.BaseLattice<Interval>- Overrides:
toStringin classjava.lang.Object
-
evalNonNullConstant
public Interval evalNonNullConstant(it.unive.lisa.symbolic.value.Constant constant, it.unive.lisa.program.cfg.ProgramPoint pp)
- Specified by:
evalNonNullConstantin interfaceit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
-
evalUnaryExpression
public Interval evalUnaryExpression(it.unive.lisa.symbolic.value.operator.unary.UnaryOperator operator, Interval arg, it.unive.lisa.program.cfg.ProgramPoint pp)
- Specified by:
evalUnaryExpressionin interfaceit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
-
is
public boolean is(int n)
Tests whether this interval instance corresponds (i.e., concretizes) exactly to the given integer. The tests is performed throughIntInterval.is(int).- Parameters:
n- the integer value- Returns:
trueif that condition holds
-
evalBinaryExpression
public Interval evalBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, Interval left, Interval right, it.unive.lisa.program.cfg.ProgramPoint pp)
- Specified by:
evalBinaryExpressionin interfaceit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
-
lubAux
public Interval lubAux(Interval other) throws it.unive.lisa.analysis.SemanticException
- Specified by:
lubAuxin interfaceit.unive.lisa.analysis.BaseLattice<Interval>- Throws:
it.unive.lisa.analysis.SemanticException
-
glbAux
public Interval glbAux(Interval other)
- Specified by:
glbAuxin interfaceit.unive.lisa.analysis.BaseLattice<Interval>
-
wideningAux
public Interval wideningAux(Interval other) throws it.unive.lisa.analysis.SemanticException
- Specified by:
wideningAuxin interfaceit.unive.lisa.analysis.BaseLattice<Interval>- Throws:
it.unive.lisa.analysis.SemanticException
-
narrowingAux
public Interval narrowingAux(Interval other) throws it.unive.lisa.analysis.SemanticException
- Specified by:
narrowingAuxin interfaceit.unive.lisa.analysis.BaseLattice<Interval>- Throws:
it.unive.lisa.analysis.SemanticException
-
lessOrEqualAux
public boolean lessOrEqualAux(Interval other) throws it.unive.lisa.analysis.SemanticException
- Specified by:
lessOrEqualAuxin interfaceit.unive.lisa.analysis.BaseLattice<Interval>- Throws:
it.unive.lisa.analysis.SemanticException
-
satisfiesBinaryExpression
public 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)- Specified by:
satisfiesBinaryExpressionin interfaceit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
-
hashCode
public int hashCode()
- Specified by:
hashCodein interfaceit.unive.lisa.analysis.BaseLattice<Interval>- Overrides:
hashCodein classjava.lang.Object
-
equals
public boolean equals(java.lang.Object obj)
- Specified by:
equalsin interfaceit.unive.lisa.analysis.BaseLattice<Interval>- Overrides:
equalsin classjava.lang.Object
-
assumeBinaryExpression
public 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 src, it.unive.lisa.program.cfg.ProgramPoint dest) throws it.unive.lisa.analysis.SemanticException
- Specified by:
assumeBinaryExpressionin interfaceit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>- Throws:
it.unive.lisa.analysis.SemanticException
-
-